Hibernate更新查询

时间:2011-09-28 14:56:40

标签: java hibernate

任何人都告诉我这个SQL代码的HQL

  

UPDATE ModelClassname SET ClassVariablename = ClassVariablename + 10 WHERE ClassVariableId = 001;

5 个答案:

答案 0 :(得分:5)

使用HQL没有必要这样做,如果你想通过JDBC查询(甚至通过Hibernate查询,你可以使用SQL查询),你可以使用直接SQL。

仅在进行批量更新时建议使用HQL查询进行更新,而不是单行。 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html#batch-direct

更面向对象的方法是使用HQL加载对象,在Java世界中执行您需要做的事情(columnValue + = 10,无论您需要做什么),然后使用hibernate会话将其保留回来齐平。

我认为它涉及更多操作,因此它的效率较低(纯粹的性能),但取决于你的Hibernate配置(缓存,群集,二级缓存等),它可能会好很多。当然,更不用说更可测试了。

答案 1 :(得分:3)

正如其他人所说,有更好的方法,但如果你真的需要,那么例如使用以下语法:

update EntityName m set m.salary = m.salary +10 where m.id = 1

答案 2 :(得分:1)

HQL查询应该看起来非常相似,除了使用表名和列名,您应该使用实体和属性名称(即在Java中使用的任何名称)。

答案 3 :(得分:1)

除了Adam Batkin的回答之外,我想补充一点,在Hibernate中通常不会使用这些查询(除非你需要一次修改整行的行)。 Hibernate的目标是使用对象。所以你通常会这样做:

MyEntity m = (MyEntity) session.get(MyEntity.class, "001");
m.setValue(m.getValue() + 10);
// and the new value will automatically be written to database at flush time

答案 4 :(得分:1)

请尝试这个

Query q = session.createQuery("from ModelClassname where ClassVariableId= :ClassVariableId");
q.setParameter("ClassVariableId", 001);

ModelClassname result = (ModelClassname)q.list().get(0);
Integer i = result.getClassVariableName();
result.setClassVariableName(i+10);
session.update(result);

关心,   Lavanyavathi.Bharathidhasan