即使在使用 org.hibernate.annotations.entity(dynamicUpdate=true) 在实体类注释中使用 dynamicUpdate=true(用于更新选择性列而不是所有列)之后,hibernate 仍在尝试更新表的所有字段,因为我在少数列上具有“非空”约束,它会引发异常。如何解决这个问题?请尽快帮忙。。
问问题
10295 次
3 回答
4
要使动态更新起作用,您应该首先从休眠中获取对象,然后更改字段。
p = session.get(Person.class,1);
p.setFirstName("Kamal");
这将导致只更新 first_name 列的查询。
以下不起作用。它将发出一个更新查询,所有其他列都设置为空。
p = new Person()
p.setId(1)
p.setFirstName("Kamal")
session.update(p)
如果您只想更新某些列,您可以使用 update HQL 命令。不建议这样做 - 因为它会通过缓存。正确的方法是上面概述的一种,加载对象,然后更改需要更改的字段。
于 2012-09-05T09:11:46.067 回答
4
尝试这个,
@org.hibernate.annotations.Entity(dynamicUpdate = true, selectBeforeUpdate = true)
于 2013-01-02T05:56:32.343 回答
0
动态更新仅在我们首先使用 session.get(...) 获取值时起作用。在这种情况下,假设我们有 10 列并且我们想要更新 5 列,然后首先我们使用 id 获取对象,然后将新值设置为获取的对象,然后它工作得很好更多我们只为5列编写编码,如果我们从那5列更新一列,然后使用动态更新查询触发,如下所示
休眠:更新用户管理员集名称=?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);
于 2015-06-10T16:52:56.620 回答