HQL更新的问题

aks*_*hay 9 java hibernate

当我尝试执行以下HQL查询时:

Query  query =  getSession().createQuery("update XYZ set status = 10");
query.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

Exception in thread "main" org.hibernate.QueryException: query must begin with SELECT or FROM: update
Run Code Online (Sandbox Code Playgroud)

编辑:
我也试过跟随.但它也没有工作.

org.hibernate.Query  query =  getSession().createQuery("update XYZ t set t.status = 10");
Run Code Online (Sandbox Code Playgroud)

EDIT2:在hinbernate.cfg.xml中进行更改解决了我的问题早些时候我正在使用

setting hibernate.query.factory_class"   = org.hibernate.hql.classic.ClassicQueryTranslatorFactor
Run Code Online (Sandbox Code Playgroud)

现在使用以下属性

<property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</property>
Run Code Online (Sandbox Code Playgroud)

Nim*_*sky 5

这不是HQL查询.你想导入javax.persistence.Query哪个允许正常的 sql,而不是org.hibernate.Query哪个适用于实体对象.

如果你想使用简单的sql,你也可以使用PreparedStatement

但是,如果你真的想使用hibernate,而不是利用entityobjects(首先完全无法使用hibernate,imho)你就可以这样做(参考文档):

String myUpdate = "update XYZ myAlias set myAlias.status = :newStatus";
// or String noAliasMyUpdate = "update XYZ set status = :newStatus";
int updatedEntities = getSession().createQuery(myUpdate) //or noAliasMyUpdate
        .setInt( "newStatus", 10 )
        .executeUpdate();
Run Code Online (Sandbox Code Playgroud)