自作主张的Hibernate

刚刚开始接触Hibernate,遇到了一个很有意思的问题。

在property中有一个access属性,开始的时候我一般不理会这个属性,也就是使用它的默认值(property),后来我发现,这个值会影响到程序的执行。举一个常用的例子。
class User{
 private String userID;
 private String gender;
.....

pubilc String getGender(){
 if (gender.equals("m")){
 return "male";
 }else if(gender.equals("f")){
 return "female"; 我的博客
 }else{
 return "unknown";
 }
}
.....
}

这样如果你没有指定gender的access属性的话,你会发现,在User这个class"第一次"(可以通过改变数据库来实现这个第一次,比如把gender字段的长度由1改成10或者从10改成1。但是从10改成100不会有这个效果,这个长度我想应该是由getGender()返回的字符串的长度决定)被使用(通过它的id取得一个对象)的时候,Hibernate会执行一次update,而如果你把gender这个字段的长度设置为1的话,则会出现异常。我想可能是因为默认的情况下,Hibernate会通过getGender来取得gender的值,然后进行比较,从而判断是否需要update数据,而这时getGender得到的值和数据库中的数据是不同的,于是Hibernate的自作主张进行更新数据操作。如果Hibernate的确是这样处理的话,我认为就有些多余了,因为它在更新数据是采用的是field的值来更新,但是判断却又使用property来判断,似乎有些不合情理。

这种情况,如果我们把access这个属性设置为field,则不会出现这个问题。

版权所有:idilent 网站转载请注明作者 其他转载方式请与作者联系( idilent@yahoo.com.cn)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值