我已经完成了Hibernate的实现,这是与更新功能相关的代码。
Query updateQuery = session.createQuery(" update User set registered = '1' " + " where user_activation_key = '"+userUUID+"'"); int result = updateQuery.executeUpdate(); session.getTransaction().commit();
我收到这个例外
Exception in thread "main" org.hibernate.QueryException: query must begin with SELECT or FROM: update [ update com.shop.domain.User set registered = '1' where user_activation_key = '04c42f1c-a55d-49cd-8bde-8d340f054d76'] at org.hibernate.QueryException.generateQueryException(QueryException.java:137) at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120) at org.hibernate.hql.internal.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:247) at org.hibernate.hql.internal.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:209) at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126) at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88) at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190) at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301) at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1796) at com.shop.service.ORMService.isUserAvailable(ORMService.java:56) at com.shop.service.ORMService.activateUserAccount(ORMService.java:39) at com.shop.web.controller.Test.main(Test.java:10) Caused by: org.hibernate.QueryException: query must begin with SELECT or FROM: update at org.hibernate.hql.internal.classic.ClauseParser.token(ClauseParser.java:104) at org.hibernate.hql.internal.classic.PreprocessingParser.token(PreprocessingParser.java:131) at org.hibernate.hql.internal.classic.ParserHelper.parse(ParserHelper.java:61) at org.hibernate.hql.internal.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:239) ... 10 more
Hibernate.cfg.xml
<hibernate-configuration> <session-factory> <property name="hibernate.bytecode.use_reflection_optimizer">false</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.password">root123</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/db</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.current_session_context_class">thread</property> <property name="hibernate.query.factory_class">org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory</property> <mapping resource="com/shop/domain/User.hbm.xml"></mapping> </session-factory>
这是什么, 查询必须以SELECT或FROM开头:update ?需要一些帮助?
在配置文件中,更改属性hibernate.query.factory_class值 从
hibernate.query.factory_class
org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory
至
org.hibernate.hql.ast.ASTQueryTranslatorFactory
查看更多forum.hibernate.org
使用Query.setParameter()方法传递参数进行查询
Query.setParameter()
Query updateQuery = session.createQuery("update User set registered = '1' where user_activation_key = :userUUID"); updateQuery.setParameter("userUUID", userUUID);