Hibernate更新查询

dxpyg8gm  于 2022-11-14  发布在  其他
关注(0)|答案(6)|浏览(138)

有人告诉我这个SQL代码的HQL是什么吗
更新模型类名集合ClassVariablename=ClassVariablename+10其中ClassVariableID=001;

iqxoj9l9

iqxoj9l91#

使用HQL来做这件事是没有意义的,如果你想这样做,你可以使用直接的SQL,通过一个JDBC查询(或者甚至通过一个Hibernate查询,你也可以使用SQL查询)。
建议仅在执行批处理更新时使用HQL查询进行更新,而不是单行。Http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html#batch-direct
一种更面向对象的方法是使用HQL加载您的对象,在Java世界中执行您需要做的事情(ColumnValue+=10,无论您还需要做什么),然后使用Hibernate会话刷新将其持久化。
我认为它涉及更多的操作,因此效率较低(在纯性能方面),但这取决于您的Hibernate配置(缓存、集群、二级缓存等)。它可以做得更好。当然,更不用说更好的测试了。

cld4siwp

cld4siwp2#

正如其他人所说,有更好的方法,但如果你真的必须这样做,那么例如使用以下语法:

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

qf9go6mv3#

除了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
mmvthczy

mmvthczy4#

HQL查询应该看起来非常相似,除了不使用表名和列名之外,应该使用实体名和属性名(即,无论您在Java中使用什么)。

rta7y2nd

rta7y2nd5#

请试一下这件。

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);

关于Lavanyavath.Bharathidhasan

jfgube3f

jfgube3f6#

HQL将在这里帮助您将对象带给您,并提供您可以轻松更新的会话帮助。

//id of employee that you want to update
 int updatedEmployeeID = 6; 
    
    //exact employee that you want to update
    Employee updateEmployee = session.get(Employee.class, updatedEmployeeID);
 
   //for debug to see is that exact data that you want to update
    System.out.println("Employee before update: "+updateEmployee); 
       
//basically we use setter to update from the @Entity class
  updateEmployee.setCompany("Arthur House");
         
 //commit
 session.getTransaction().commit();

相关问题