我需要通过其他事务锁定行读取

时间:2014-12-12 07:55:51

标签: java mysql jpa jboss

我需要锁定表的行以供其他Transaction读取。 手段, 如果事务1读取表1的少量记录,则Transaction2

不应读取这些行

我有以下环境 1. MySQL 2. Jboss 5.1 3. JPA 1.0

请告诉我你的建议

我正在使用本机查询选择更新 查询createNativeQuery = entityManager.createNativeQuery("从cscache中选择id,其中id =?for update");

但是它给出了以下错误

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

2 个答案:

答案 0 :(得分:0)

你可以这样使用。

LOCK TABLES tbl_name READ;

了解更多详情。请点击here

答案 1 :(得分:0)

SELECT FOR UPDATE应该可以解决问题。

YourClass c = em.find(YourClass.class, yourId,
    LockModeType.PESSIMISTIC_WRITE);

TypedQuery<Table> q = em.createQuery("select t from Table t where ...", Table.class);
q.setLockMode(LockModeType.PESSIMISTIC_WRITE);