可以在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应该没有问题。