DBテーブルからデータを抽出する次の方法があります
public User getNextUser() {
final EntityManager em = getEntityManagerFactory().createEntityManager();
final String sql = "UPDATE user " +
"SET processing = TRUE " +
"WHERE id = (" +
"SELECT id " +
"FROM user " +
"WHERE processing = FALSE " +
"LIMIT 1 FOR UPDATE) " +
"RETURNING *";
final Query query = em.createNativeQuery(sql, User.class);
User result = null;
try {
List userList = query.getResultList();
if (!userList.isEmpty()) {
result = (User) userList.get(0);
}
} finally {
em.close();
}
return result;
}
このネイティブ クエリを Hibernate クエリに変換するにはどうすればよいですか (第 2 レベルのキャッシュを無効にしないため)。私はそれに相当するものを読みました
SELECT ... FOR UPDATE
Hibernate では、次の方法で実装できます。
PESSIMISTIC_WRITE