我有一个object A
映射到table A
in DB
class A {
Integer id;
String field2,field2;field3 ,... fieldN;
//lots of other attribute
}
现在我想编写一个只更新单个字段的 DAO api。一种方法是我可以首先加载对象,然后更改我需要的属性,然后使用合并 api
//start transcation
A a = session.load(A.class, id);
A.setfieldP(newValue)
session.merge(A)
//commit transcation
现在如果我使用以下代码
//start transcation
A a = new A();
a.setId(id); //set a id by which object A exists in DB
A.setfieldP(newValue)
session.merge(A)
//commit transaction
现在第二种方法除了 id 和 fieldP 之外的所有字段都设置为 null
1)现在还有其他方法吗?
2)我可以使用更新而不是合并吗?
如果您需要一次更新大量实体,最有效的方法是使用查询:
Query query = session.createQuery("update EntityName set fieldP = 'newValue' "
+ "where id IN (75, 76)");
query.executeUpdate();
这允许您更改字段值,而无需将一个或多个实体加载到内存中。
最佳实践是使用命名查询和命名参数 - 上面的实现只是一个示例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)