可以在hbm.xml中映射的属性是暂时的吗?

Kon*_*rus 5 java serialization hibernate transient

假设我有这样一个User实体:

class User {
    private String login;
    transient private String hashedPassword;
}
Run Code Online (Sandbox Code Playgroud)

我不想永远转移hashedPassword到客户端,所以我让它变得短暂.

该类由Hibernate映射,两个字段都映射在hbm.xml中.

这种实施安全和正确吗?将Hibernate正确存储hashedPassword在数据库中,将其从数据库加载到对象中,将其保存在复制的二级缓存和本地会话缓存等中吗?

transient顺便说一句,Hibernate或二级缓存是以任何方式尊重还是完全忽略它?

编辑:我已经有两个答案似乎没有包括等式的一个特定方面.我根本没有使用注释,只有XML映射hbm.xml.这个Java瞬态字段是OR映射的hbm.xml.

jay*_*100 7

hibernate不保存未映射/瞬态属性.

Hibernate理解标准java瞬态修饰符的重要性 - 但是如果您选择的话,还允许您使用@Transient注释将属性注释为瞬态...或者只是将字段完全从映射文件中删除.

在你的情况下,你可能不需要做任何特别的事情,hibernate应该简单地"做正确的事",忽略未映射的字段.

所以:这里吸取的教训 -

如果只使用hbm.xml

1)休眠不保存未映射的属性 - 它们实际上是瞬态的.

如果使用POJO

2)Hibernate将忽略保存"@Transient"注释变量:

@Transient
int ignored=0;
Run Code Online (Sandbox Code Playgroud)

3)Hibernate也会忽略使用标准"瞬态"修饰符保存变量:

private transient int ignored =0;
Run Code Online (Sandbox Code Playgroud)

请参阅http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/以获得对此的出色解释.


wrs*_*der 3

看起来 Hibernate 不会保留带有transient关键字的字段,无论您有什么其他注释。

单独的@Transient注释将允许您指示 Hibernate 忽略持久性的非瞬态字段,但我认为不可能做与让 Hibernate 持久化字段相反的事情transient

类似的讨论在这里:

JPA - 在模型中使用注释

对瞬态变量注解@Basic

上面最相关的引用来自 JPA 2.0 规范:“映射注释不得应用于transient或 的字段或属性@Transient。”