2013-02-04 81 views
1

我将从单挑警告开始,我是一名休眠新手。 比方说,我有一个这样的查询:休眠 - 更新查询与条款

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

什么是执行这样的查询,如果我的项目使用Hibernate的正确方法是什么? 我用简单的createSQLQuery()去?我希望以更“面向对象”的方式来实现,但我似乎在从现有数据库获取数据并更新数据方面存在问题。我是否使用createQuery()并获取数据进行更新,然后考虑结果列表并使用setter?另一个问题是在哪里条款...

感谢您的任何帮助。

回答

3

Hibernate支持的“面向对象”方法是通过标准API,但它不支持更新,只有选择。你需要遍历它并调用setter来更新(这对于小型集合来说很好,对于二级缓存可以很好地工作,但是一个灾难就是你的数据集很大)。否则使用HQL或原生SQL。

休眠的条件查询:

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

另一种选择值得探讨的是QueryDSL

+0

我在最后做了一些改变。由于没有任何其他答案,我想checkmark会发给你。谢谢。 – Raidmaster