Hibernate - 使用where子句更新查询

时间:2013-02-04 14:27:59

标签: hibernate sql-update

我将从一个单挑警告开始,我是一个休眠的新秀。 假设我有一个类似的查询:

UPDATE entity SET attribute='value' WHERE anotherAttribute IN (val1, val2);

如果我的项目使用hibernate,执行此类查询的正确方法是什么? 我是否使用简单的createSQLQuery()?我想以更“面向对象”的方式来做这件事,但我似乎在从现有数据库获取数据并更新它时遇到问题。我是否使用createQuery()并获取要更新的数据,然后考虑结果列表并使用setter?另一个问题是where where in ...

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

Hibernate支持的“面向对象”方式是通过条件API,但它不支持更新,只支持选择。您需要遍历它并调用setter进行更新(这适用于小型集合,适用于二级缓存,但灾难是您的数据集很大)。否则使用HQL或本机SQL。

Hibernate条件查询:

 session.createCriteria(Entity.class)
    .add(Restrictions.eq("attribute", "value"))
    .add(Restrictions.in("anotherAttribute", <collection-of-values>)
    .list();

值得探索的另一个选择是QueryDSL