假设我有一个像这样的User
实体:
class User {
private String login;
transient private String hashedPassword;
}
我不想将
hashedPassword
传输到客户端,因此我将其设置为 transient 。此类是由Hibernate映射的,两个字段都映射在hbm.xml中。
此实现安全且正确吗? Hibernate是否会在数据库中正确存储
hashedPassword
,将其从数据库加载到对象中,将其保留在复制的第二级缓存和本地 session 缓存等中?顺便说一句,Hibernate或2级缓存是否以某种方式尊重
transient
或完全忽略它?编辑:我已经得到两个答案,似乎没有包含方程式的一个特定方面。我根本不使用批注,仅使用
hbm.xml
中的XML映射。并且此Java transient 字段在hbm.xml
中进行OR映射。 最佳答案
未映射/ transient 属性不会由 hibernate 保存。
Hibernate理解标准Java transient 修饰符的重要性-但如果您选择的话,也可以使用@Transient批注将属性作为 transient 进行批注...或将字段完全排除在映射文件之外。
在您的情况下,您可能不需要做任何特殊的事情, hibernate 应该通过忽略未映射的字段来简单地“做正确的事”。
所以:在这里学到的教训-
(如果仅使用hbm.xml)
1)未映射的属性不会由 hibernate 保存-它们实际上是 transient 的。
如果使用POJO
2)Hibernate将忽略保存带“@Transient”注释的变量:
@Transient
int ignored=0;
3)Hibernate也将忽略使用标准“ transient ”修饰符保存的变量:
private transient int ignored =0;
有关此内容的出色解释,请参见http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/。
关于java - hbm.xml中映射的属性可以是 transient 的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8659594/