假设我有一个User
像这样的实体:
class User {
private String login;
transient private String hashedPassword;
}
我永远不想转移hashedPassword
给客户,所以我把它变成暂时的。
该类由 Hibernate 映射,两个字段都映射在 hbm.xml 中。
这个实现安全且正确吗? Hibernate会正确存储hashedPassword
在数据库中,将其加载到数据库中的对象中,将其保存在复制的二级缓存和本地会话缓存等中?
换句话说,Hibernate 或二级缓存是否尊重transient
以任何方式或完全忽略它?
EDIT:我已经得到了两个答案,但似乎没有包含方程式的某一特定方面。我根本不使用注释,只使用 XML 映射hbm.xml
。这个 Java 瞬态字段是 OR 映射的hbm.xml
.
Hibernate 不保存未映射/瞬态属性.
Hibernate 理解标准 java 瞬态修饰符的重要性 - 但也允许您使用 @Transient 注释将属性注释为瞬态,如果您选择的话......或者干脆将该字段从映射文件中删除。
在你的情况下,你可能不需要做任何特殊的事情,休眠应该简单地“做正确的事情”,通过忽略未映射的字段。
所以:这里学到的教训 -
如果只使用hbm.xml
1) 未映射的属性不会被 hibernate 保存——它们实际上是暂时的。
如果使用 POJO
2)Hibernate将忽略保存“@Transient”注释变量:
@Transient
int ignored=0;
3) Hibernate 还将忽略使用标准“transient”修饰符保存变量:
private transient int ignored =0;
See http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/对此有一个很好的解释。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)