Java 选择“更新不工作”
我的以下本机查询不工作:Java 选择“更新不工作”,java,mysql,hibernate,jboss,Java,Mysql,Hibernate,Jboss,我的以下本机查询不工作: Query createNativeQuery = entityManager.createNativeQuery( "select id from cscache where id=? for update "); 环境详情: Mysql 5.6 JBoss5.1 JPA1.0 错误: 2014-12-12 10:20:14581警告[org.hibernate.util.jdbceptionReporter] SQL错误:1064,SQLState:4200
Query createNativeQuery = entityManager.createNativeQuery(
"select id from cscache where id=? for update ");
环境详情:
不太熟悉JPA,但您似乎没有告诉它
?
的值是多少。查看。对于更新,基本上会对行进行锁定,以便使用您需要使用的JPA实现相同的功能。要设置锁,可以使用EntityManager或TypeQuery,并使用LockModeType.悲观_WRITE
请参阅我实际上没有在hibernate中进行for更新,但我相信您可以(而且应该?)在会话或查询对象上进行更新。为什么不让hibernate执行,而不是执行本机查询? 根据关于锁定()的文档,您可以在会话或查询上设置锁定模式
Cscache cscache = (Cscache )session.get( Cscache.class, id, LockOptions.UPGRADE );
指定锁定选项将导致执行SELECT…FOR UPDATE。具有
limit 2
查询的代码在哪里?这是唯一一个没有limit 2的代码。我猜Hibernate MySQL方言不支持SELECT FOR UPDATE我在下一行createNativeQuery.setParameter(1,19)中有此选项是的,但它不应该是?1
而不是?
?它可以从cscache中选择id,其中id=?但如果您提供更新,它就不起作用。我正在使用JPA 1.0,其中LockModeType.悲观写入不可用