在Hibernate中使用Enum会导致select后跟一个update语句

Leo*_*rdo 5 enums hibernate

我有一个具有枚举属性的映射实体.通过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会产生什么后果?

谢谢

fmu*_*car 2

如果您的对象标记为脏,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 方法来确定对象是否脏。