选择更新无效

时间:2014-12-12 15:23:32

标签: java mysql hibernate jboss

我的以下原生查询无效:

Query createNativeQuery = entityManager.createNativeQuery(
   "select id from cscache where id=? for update ");

环境详情:

  1. Mysql 5.6
  2. Jboss 5.1
  3. JPA 1.0
  4. 错误:

      

    2014-12-12 10:20:14,581 WARN [org.hibernate.util.JDBCExceptionReporter]

         

    SQL错误:1064,SQLState:42000(http-0.0.0.0-8543-3:)

         

    2014-12-12 10:20:14,581 ERROR [org.hibernate.util.JDBCExceptionReporter]       您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“限制2”附近使用正确的语法(http-0.0.0.0-8543-3:)

3 个答案:

答案 0 :(得分:1)

对于Update,基本上会锁定行,要使用JPA实现相同的操作,您需要使用Lock Modes。要设置锁定,可以使用EntityManager或TypeQuery并使用LockModeType.PESSIMISTIC_WRITE。

参考this article

答案 1 :(得分:0)

具体不熟悉JPA,但您似乎并没有告诉它?的价值是什么。查看setParameter

答案 2 :(得分:0)

我实际上还没有在hibernate中进行更新,但我相信你可以(而且应该)在Session或查询对象上进行更新。为什么不让hibernate执行它而不是执行本机查询? 根据锁定文档(Chapter 5: Locking,您可以在会话或查询中设置锁定模式。

Cscache  cscache  = (Cscache )session.get( Cscache.class, id, LockOptions.UPGRADE );

指定LockOptions应该导致执行SELECT ... FOR UPDATE。