@transient 注解注解,什么意思?

该注解,是Hibernate、morphia等框架的注解。 

1)Hibernate中:

实体类中使用了@Table注解后,想要添加表中不存在字段,就要使用@Transient这个注解了。在网上找的方法是要将这个注解添加到自定义字段的get方法上,这样做了之后程序报错,最后试了将该注解添加到定义该字段的头部即可,例如:

即放在实体类的成员变量上部。

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  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中,你不必为他们添加任何注解:
[java]  view plain  copy
 
 
  1. private int 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注解:

[java]  view plain  copy
 
 
  1. import com.google.code.morphia.annotations.Transient;  
  2.   
  3. @Transient  
  4. private int myTransientInt;  
默认情况下,Morphia把属性名作为Mongo中的字段名。这个可以通过@Property注解进行修改,指定一个名称。

[java]  view plain  copy
 
 
  1. import com.google.code.morphia.annotations.Property;   
  2.   
  3. @Property("my_integer")   
  4. private int myInt;  //在MongoDB中为my_integer     






  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: @transient注解是Java语言中的一个关键字,用于标记一个变量或属性不需要被序列化。在Java中,当我们需要将一个对象进行序列化时,如果该对象中含了一些不需要被序列化的属性,我们可以使用@transient注解来标记这些属性,从而避免它们被序列化。 ### 回答2: @transient 注解是一种 Java 语言中的标记注解,用于修饰字段。它的作用是告诉编译器在序列化对象时忽略被修饰的字段。在对象被序列化成字节流或持久化到磁盘上时,被 @transient 注解修饰的字段不会被含在序列化的结果中。 使用 @transient 注解的字段通常是一些敏感信息或临时变量,不需要被永久保存或传输。这些字段对于对象的内部状态或计算结果非常重要,但不需要被其他程序或系统使用。 当对象进行反序列化时,被 @transient 注解修饰的字段会被 JVM 设置为默认值。默认值可能是基本数据类型的零值,例如 0、false 或 null。因此,被 @transient 注解修饰的字段不能依赖于默认值,需要在对象的方法中重新计算或初始化。 需要注意的是,@transient 注解只对序列化有效,对于对象在内存中的操作没有影响。因此,在进行对象的深拷贝或内存传递时,被 @transient 注解修饰的字段仍然会被含。 总之,@transient 注解给程序员提供了一种控制对象序列化的机制。通过标记敏感信息或临时变量,可以有效地控制对象序列化的过程,并保护数据的安全性。 ### 回答3: @transient注解是Java中的一种修饰符,用于标识一个字段或方法不需要被序列化。当一个类实现了Serializable接口并且含了可序列化的字段时,这些字段的值会被写入到输入/输出流中以实现对象的序列化和反序列化。然而,有时我们希望某个字段或方法不参与序列化过程,@transient注解就可以派上用场。 当一个字段被标记为@transient时,它将在对象被序列化时被忽略,即不会将该字段的值保存到流中。在对象被反序列化时,该字段会被赋予默认值。 常见的情况下,我们使用@transient注解来标记敏感信息字段、临时变量或计算结果字段,以确保它们不会被序列化存储。例如,如果我们有一个含用户密码的User对象,在序列化过程中,我们可以将密码字段标记为@transient,这样在序列化时密码字段将不会被保存到文件或数据库中,提高了数据的安全性。 需要注意的是,@transient注解只能用于字段或方法,不能用于类或接口。 总结来说,@transient注解用于标记某个字段或方法不需要参与对象的序列化过程,它的作用是告诉Java序列化机制忽略该字段。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值