使用注释无效的Hibernate中的dynamicUpdate = true

时间:2012-09-05 09:03:34

标签: hibernate annotations

即使在使用org.hibernate.annotations.entity(dynamicUpdate = true)在实体类注释中使用dynamicUpdate = true(用于更新选择列而不是所有列)之后,hibernate也会尝试更新表的所有字段,因为我在几列上有“not null”约束,所以抛出异常。怎么解决这个?请尽快帮助..

3 个答案:

答案 0 :(得分:4)

要使动态更新起作用,您应先获取对象形式hibernate,然后更改字段。

p = session.get(Person.class,1);
p.setFirstName("Kamal");

这将导致查询只更新first_name列。

以下不起作用。它将发出更新查询,其他所有列都设置为null。

p = new Person()
p.setId(1)
p.setFirstName("Kamal")
session.update(p)

如果只想更新某些列,可以使用update HQL命令。这不建议 - 因为它通过缓存。正确的方法是上面概述的方法,加载对象,然后更改需要更改的字段。

答案 1 :(得分:3)

试试这个,

@org.hibernate.annotations.Entity(dynamicUpdate = true, selectBeforeUpdate = true)

答案 2 :(得分:0)

动态更新仅在我们首先使用session.get获取值时才有效(...)在这种情况下,假设我们有10列,我们想要更新5列,然后首先使用id获取对象,然后将新值设置为获取对象,它工作正常更多我们只编写5列编码,如果我们从该5列更新一列,然后使用动态更新查询fire,如下所示

Hibernate:更新usermaster set name =? user_id =?

下面是我的代码,在这里我只使用前端的名字

Session session = sessionFactory.openSession();
Transaction tran = session.beginTransaction();
Usermaster obj = (Usermaster) session.get(Usermaster.class,
        usermaster.getUserId());
obj.setUsername(usermaster.getUsername());
obj.setName(usermaster.getName());
obj.setContact(usermaster.getContact());
obj.setEmail(usermaster.getEmail());
obj.setUserStatus(usermaster.getUserStatus());
obj.setUserType(usermaster.getUserType());
session.update(obj);