我有一个具有枚举属性的映射实体.通过loking日志文件,每当我在这样的实体上运行select语句时,结果就是紧接着的更新.例如,如果我的结果集包含100条记录,那么我有:
[INFO org... select...]
[INFO org... update... where id=?]
[INFO org... update... where id=?]
Run Code Online (Sandbox Code Playgroud)
....重复100次
如果我将属性标记为update = false,则问题将消失.枚举是通过枚举转换器类来分配的,我从一本着名的书中复制了它.所以我不知道我是否只是复制并粘贴代码.这是在hbm文件中声明的方式.
<typedef class="mypackage.HbnEnumConverter" name="the_type">
<param name="enumClassname">mypackage.TheType</param>
</typedef>
Run Code Online (Sandbox Code Playgroud)
你能指出一个调查方向吗?除此之外,在hibernate字段上使用update = false会产生什么后果?
谢谢
如果您的对象标记为脏,Hibernate 将生成更新。
查看日志以查看休眠状态是否将您的对象标记为脏。
如果你有类似下面的东西。
class Entity{
public YourEnum getEnum() {
return yourEnum==null?YourEnum.SOME_VALUE:....;
}
}
Run Code Online (Sandbox Code Playgroud)
或者也许在您的 Enum.equals 方法中,您可能会为 equals(null,null) 情况返回 false ?
如果比较的对象相同,则 equals 方法应返回 true,否则返回 false,因为 hibernate 使用 equals 方法来确定对象是否脏。