一尘不染

Hibernate / JPA是否考虑了瞬态修饰符(而不是注释)

hibernate

我想避免序列化(在JMS / AMF中),但仍使用JPA / Hibernate保留该字段。

transient修改我的朋友?@Transient注释和transient修饰符是否相关?

Java规范明确指出,系统服务不会将瞬态字段保存到持久性存储中。但是hibernate是系统服务吗?(我不这样认为)
http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#78119

java.io.Serialisable接缝以指示需要对a out.writeObject and in.readObject进行序列化
http://download.oracle.com/javase/1.4.2/docs/api/java/io/Serializable.html

有见识吗?

也许我应该只写一个快速测试,但是我会对某种规格更加自信。

谢谢 !


阅读 231

收藏
2020-06-20

共1个答案

一尘不染

transient修改我的朋友?@Transient注释和transient修饰符是否相关?

它们之间并没有 真正的 联系,但恐怕它们还是不会成为您的朋友,transientHibernate / JPA不会保留属性。JPA规范如下所示:

2.1.1持久字段和属性

持久性提供程序运行时可以通过JavaBeans样式属性访问器或实例变量来访问实体的持久状态。单一访问类型(字段或属性访问)适用于实体层次结构。使用注解时,映射注解在实体类的持久字段或持久属性上的放置将访问类型分别指定为基于字段的访问或基于属性的访问。

  • 如果实体具有基于字段的访问权限,则持久性提供程序运行时将直接访问实例变量。 没有注释的
    所有非transient实例变量Transient 都是持久性的。使用基于字段的访问时,实体类的对象/关系映射注释将对实例变量进行注释。
  • 如果实体具有基于属性的访问,则持久性提供程序运行时将通过属性访问器方法访问持久状态。未使用注释注释的所有属性
    Transient都是持久性的。属性访问器方法必须是公共的或受保护的。使用基于属性的访问时,实体类的对象/关系映射注释会注释getter属性访问器。
  • 映射注释不能应用于那些字段或属性transientTransient
  • 如果将映射注释应用于持久字段和属性,或者XML描述符指定在类层次结构中使用不同的访问类型,则该行为未指定。

参考文献

2020-06-20