1

我将从一个单挑警告开始,我是一个冬眠新手。假设我有这样的查询:

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

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

谢谢你的帮助。

4

1 回答 1

3

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

休眠条件查询:

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

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

于 2013-02-04T15:41:19.967 回答