当我尝试执行以下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)
这不是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)
| 归档时间: |
|
| 查看次数: |
4979 次 |
| 最近记录: |