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

时间:2011-01-07 14:42:37

标签: hibernate enums

我有一个具有枚举属性的映射实体。 通过loking日志文件,每当我在这样的实体上运行select语句时,结果就是紧接着的更新。 例如,如果我的结果集包含100条记录,那么我有:

[INFO org... select...]
[INFO org... update... where id=?]
[INFO org... update... where id=?]

....重复100次

如果我将属性标记为update = false,则问题将消失。 枚举是通过枚举转换器类来分配的,我从一本着名的书中复制了它。 所以我不知道我是否只是复制并粘贴代码。这是在hbm文件中声明的方式。

<typedef class="mypackage.HbnEnumConverter" name="the_type">
    <param name="enumClassname">mypackage.TheType</param>
</typedef>

你能指出一个调查方向吗?此外,在hibernate字段上有update = false的后果是什么?

感谢

1 个答案:

答案 0 :(得分:2)

如果您的对象标记为脏,Hibernate将生成更新。

查看日志以查看hibernate是否将您的对象标记为脏。

如果您有类似下面的内容。

 class Entity{

   public YourEnum getEnum() {
    return yourEnum==null?YourEnum.SOME_VALUE:....;
   }
 }

或者在您的Enum.equals方法中,您可能会返回false,因为它可能是等于(null,null)的情况?

如果比较的对象是相同的,则equals方法应返回true,否则为hibernate使用equals方法来判断对象是否脏。