我有一个具有枚举属性的映射实体。 通过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的后果是什么?
感谢
答案 0 :(得分:2)
如果您的对象标记为脏,Hibernate将生成更新。
查看日志以查看hibernate是否将您的对象标记为脏。
如果您有类似下面的内容。
class Entity{
public YourEnum getEnum() {
return yourEnum==null?YourEnum.SOME_VALUE:....;
}
}
或者在您的Enum.equals方法中,您可能会返回false,因为它可能是等于(null,null)的情况?
如果比较的对象是相同的,则equals方法应返回true,否则为hibernate使用equals方法来判断对象是否脏。