@SuppressWarnings("unchecked") private List<BatchJob> nextFiveBatchJobs(Session session, Integer maxResult) { Query query = session.createQuery( "select j from BatchJob j", BatchJob.class ) .setMaxResults( maxResult ) .unwrap( Query.class ); applySkipLocked(query); return query.list(); }
@Test @RequiresDialect({ Oracle8iDialect.class, PostgreSQL95Dialect.class }) public void testSkipLocked() throws NoSuchFieldException, IllegalAccessException { Session session = sessionFactory().openSession(); session.beginTransaction(); try { session.createQuery( "select a from A a", A.class ) .unwrap( org.hibernate.query.Query.class ) .setLockOptions( new LockOptions( LockMode.PESSIMISTIC_WRITE ) .setTimeOut( LockOptions.SKIP_LOCKED ) ) .list(); String lockingQuery = sqlStatementInterceptor.getSqlQueries().getLast(); assertTrue( lockingQuery.toLowerCase().contains( "skip locked") ); } finally { session.getTransaction().commit(); session.close(); } } }
@Test @RequiresDialect({ Oracle8iDialect.class, PostgreSQL81Dialect.class, SQLServer2005Dialect.class } ) public void testNoWait() throws NoSuchFieldException, IllegalAccessException { Session session = sessionFactory().openSession(); session.beginTransaction(); try { session.createQuery( "select a from A a", A.class ) .unwrap( org.hibernate.query.Query.class ) .setLockOptions( new LockOptions( LockMode.PESSIMISTIC_WRITE ) .setTimeOut( LockOptions.NO_WAIT ) ) .list(); String lockingQuery = sqlStatementInterceptor.getSqlQueries().getLast(); assertTrue( lockingQuery.toLowerCase().contains( "nowait") ); } finally { session.getTransaction().commit(); session.close(); } }