可以在hbm.xml中映射的属性是暂时的吗?
假设我有一个像这样的User
实体:
class User { private String login; transient private String hashedPassword; }
我不想将hashedPassword
转移到客户端,因此我将其设置为瞬态。
该类由Hibernate映射,两个字段都映射在hbm.xml中。
这种实施安全吗? Hibernate会在数据库中正确存储hashedPassword
,将其从数据库加载到对象中,将其保存在复制的二级缓存和本地会话缓存中吗?
顺便说一句,Hibernate或二级缓存是否以任何方式对transient
进行处理或完全忽略它?
编辑 :我已经有两个答案似乎没有包括等式的一个特定方面。 我根本没有使用注释,只是在hbm.xml
使用XML映射。 这个Java瞬态字段在hbm.xml
OR映射。
hibernate不保存未映射/瞬态属性 。
Hibernate理解标准java瞬态修饰符的重要性 – 但是如果您选择的话,还允许您使用@Transient注释将属性注释为瞬态…或者只是将字段完全从映射文件中删除。
在你的情况下,你可能不需要做任何特别的事情,hibernate应该简单地“做正确的事”,忽略未映射的字段。
所以:这里吸取的教训 –
如果只使用hbm.xml
1)hibernate不保存未映射的属性 – 它们实际上是瞬态的。
如果使用POJO
2)Hibernate将忽略保存“@Transient”注释变量:
@Transient int ignored=0;
3)Hibernate也会忽略使用标准“瞬态”修饰符保存变量:
private transient int ignored =0;
请参阅http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/以获得对此的出色解释。
看起来Hibernate不会持有带有transient
关键字的字段,无论你有什么其他注释。
单独的@Transient
注释将允许您指示Hibernate忽略非瞬态字段的持久性,但我不认为可能与Hibernate持续存在transient
字段相反。
这里类似的讨论:
JPA – 在模型中使用注释
注释@Basic到瞬态变量
以上最相关的引用,来自JPA 2.0规范:“映射注释不得应用于transient
或@Transient
字段或属性。”
这就是我的想法–Hibernate只是一种映射技术。 将字段标记为TRANSIENT时,java将不会保留该字段。 并且由于它的状态不是持久的,为什么hibernate应该在L2缓存中维护它等等? 所以即使你在hbm文件中映射瞬态字段,hibernate应该没有问题。