1. 程式人生 > >@transient 註解註解,什麼意思?

@transient 註解註解,什麼意思?

該註解,是Hibernate、morphia等框架的註解。 

1)Hibernate中:

實體類中使用了@Table註解後,想要新增表中不存在欄位,就要使用@Transient這個註解了。在網上找的方法是要將這個註解新增到自定義欄位的get方法上,這樣做了之後程式報錯,最後試了將該註解新增到定義該欄位的頭部即可,例如:

即放在實體類的成員變數上部。

  1. @Transient
  2. private String str;

2)morphia中:

根據我之前的文章知道,mongodb資料庫是沒有資料庫欄位的。但就不存在”想要新增表中不存在欄位,就要使用@Transient這個註解了“的問題,那為什麼還是用@Transient?

答:

因為使用morphia框架,一般情況下,儲存原始和基本型別的屬性到Mongo中,你不必為他們新增任何註解。但是如果你不想該實體類中的某個欄位(如

//這個是常量。引入這個常量,是為了:1)直接呼叫即可,不用每次都輸入“telNum”。2)便於程式碼的可讀性,如果你在程式中輸入“telNum”別人不明白是什麼,你固定寫到某個位置,大家一看就明白了 3)也可以防止別寫程式時將“telNum”敲錯,因為使用"物件名.成員變數名"輸入“.”的時候會有可能程式碼提示,選擇即可,這樣是不可能出錯的。
public final static String telNum= "telNum";
//類似於jf工程中,如下的用法
//public class ProjectContants {
//public static String CURRENT_USER = "CURRENT_USER";
//public static String CURRENT_ORGAN = "CURRENT_ORGAN";
//public static String CURRENT_PROJECT = "CURRENT_PROJECT";
//public static String RANDOM_IMAGE_CODE="RANDOM_IMAGE_CODE";
//}
)作為document存入mongodb資料庫中,那麼你就要加上@Transient。不然,當你執行mongodb的
findAndModify等新增、修改操作時,你不想寫入mongodb的某個欄位,也寫入mongodb資料庫中了。
http://blog.csdn.net/z69183787/article/details/52942124
因為使用morphia框架,一般情況下,儲存原始和基本型別的屬性到Mongo中,你不必為他們新增任何註解:
  1. privateint myInt;  
  2. private Date myDate;  
  3. private List<String> myStrings;  
  4. private String[] stringArray;  

預設情況下,Morphia將會試著對映所有支援的基本和原始型別到Mongo,包括這些型別的陣列。

MongoDB僅僅有以下資料型別:

•Integer(32位有符號值)

•Long(64有符號值) 

•Double(64位IEEE745浮點值)

•String (字串)

這裡有些有價值的轉換

•float  →  double

•byte   →  int

•short  →  int

•char  →  String       

並且,依賴於你的模型中存在的型別和資料庫將會試著自動為你轉換。我的意思是,因為在MongoDB資料庫中只存在三種數字型別(32/64有符號, 64位FP)這將相當容易轉換。下面的列表為當前什麼樣的基本和原始型別可以被儲存:

 •enum(在Mongo中作為String儲存)

Java.util.Date(在Mongo中儲存為從新紀元UTC的毫秒數)

•java.util.Locale(作為字串儲存)

•com.mongodb.DBRef

•com.mongodb.ObjectId                  

 正如我我們上面的例子所示,Morphia還支援java.util.List,java.util.Set和java.util.Map容器,和任何支援的原始型別的陣列。如果你想把一個屬性排除對映到Mongo中, 你可以使用@Transient註解:

  1. import com.google.code.morphia.annotations.Transient;  
  2. @Transient
  3. privateint myTransientInt;  
預設情況下,Morphia把屬性名作為Mongo中的欄位名。這個可以通過@Property註解進行修改,指定一個名稱。
  1. import com.google.code.morphia.annotations.Property;   
  2. @Property("my_integer")   
  3. privateint myInt;  //在MongoDB中為my_integer