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