@Test public void test_hql_read_only_entities_native_example() { doInJPA( this::entityManagerFactory, entityManager -> { //tag::hql-read-only-entities-native-example[] List<Call> calls = entityManager.createQuery( "select c " + "from Call c " + "join c.phone p " + "where p.number = :phoneNumber ", Call.class ) .setParameter( "phoneNumber", "123-456-7890" ) .unwrap( org.hibernate.query.Query.class ) .setReadOnly( true ) .getResultList(); //end::hql-read-only-entities-native-example[] }); } }
"select p from Person p", Person.class) .setMaxResults( 10 ) .unwrap( Query.class ) .setLockOptions( new LockOptions( LockMode.PESSIMISTIC_WRITE )
@Test public void testJPQLUpperAttributeValueBindParameterType() throws Exception { doInJPA( this::entityManagerFactory, entityManager -> { //tag::basic-attribute-converter-query-parameter-converter-object-example[] SessionFactory sessionFactory = entityManager.getEntityManagerFactory() .unwrap( SessionFactory.class ); MetamodelImplementor metamodelImplementor = (MetamodelImplementor) sessionFactory.getMetamodel(); Type captionType = metamodelImplementor .entityPersister( Photo.class.getName() ) .getPropertyType( "caption" ); Photo photo = (Photo) entityManager.createQuery( "select p " + "from Photo p " + "where upper(caption) = upper(:caption) ", Photo.class ) .unwrap( Query.class ) .setParameter( "caption", new Caption("Nicolae Grigorescu"), captionType) .getSingleResult(); //end::basic-attribute-converter-query-parameter-converter-object-example[] assertEquals( "Dorobantul", photo.getName() ); } ); }
@Override public <T> T unwrap(Class<T> cls) { return underlyingQuery.unwrap(cls); } }
@Override public <T> T unwrap(final Class<T> cls) { return delegate.unwrap(cls); } }
@Override public <T> T unwrap(Class<T> cls) { return typedQuery.unwrap(cls); } }
@Override public <T> T unwrap(final Class<T> cls) { return delegate.unwrap(cls); } }
@Override public <T> T unwrap(Class<T> cls) { return underlyingQuery.unwrap(cls); } }
@Override public <T> T unwrap(Class<T> cls) { return typedQuery.unwrap(cls); } }
@Override public <T> T unwrap(Class<T> type) { return delegate.unwrap(type); } }
public <T> T unwrap(Class<T> cls) { return jpaqlQuery.unwrap( cls ); }
@Override public <T> T unwrap(Class<T> cls) { if (getParticipatingQueries().size() > 1) { throw new PersistenceException("Unsupported unwrap: " + cls.getName()); } return delegate.unwrap(cls); }
@Override @SuppressWarnings("unchecked") public <X> TypedQuery<X> transformQuery(TypedQuery<?> query, ObjectBuilder<X> objectBuilder) { Query hQuery = query.unwrap(Query.class); hQuery.setResultTransformer(new ObjectBuilderResultTransformerAdapter(objectBuilder)); return (TypedQuery<X>) query; }
@SuppressWarnings("unchecked") @Override public List<SLASummaryBean> execute(EntityManager em) throws JPAExecutorException { initPossibleSortbyColumnList(em); createCriteriaQuery(em); TypedQuery<SLASummaryBean> typedQuery = em.createQuery(criteriaQuery); typedQuery.setMaxResults(numMaxResults); LOG.debug("Query string: {0}",typedQuery.unwrap(org.apache.openjpa.persistence.QueryImpl.class).getQueryString()); return typedQuery.getResultList(); }
@SuppressWarnings("unchecked") @Override public List<SLASummaryBean> execute(EntityManager em) throws JPAExecutorException { initPossibleSortbyColumnList(em); createCriteriaQuery(em); TypedQuery<SLASummaryBean> typedQuery = em.createQuery(criteriaQuery); typedQuery.setMaxResults(numMaxResults); LOG.debug("Query string: {0}",typedQuery.unwrap(org.apache.openjpa.persistence.QueryImpl.class).getQueryString()); return typedQuery.getResultList(); }
private void stream(EntityManager entityManager) { final AtomicLong sum = new AtomicLong(); try(Stream<Post> postStream = entityManager .createQuery("select p from Post p", Post.class) .setMaxResults(resultSetSize) .unwrap(Query.class) .stream()) { postStream.forEach(post -> sum.incrementAndGet()); } assertEquals(resultSetSize, sum.get()); }
private void stream(EntityManager entityManager) { final AtomicLong sum = new AtomicLong(); try(Stream<Post> postStream = entityManager .createQuery("select p from Post p", Post.class) .setMaxResults(resultSetSize) .setHint(QueryHints.HINT_FETCH_SIZE, Integer.MIN_VALUE) .unwrap(Query.class) .stream()) { postStream.forEach(post -> sum.incrementAndGet()); } assertEquals(resultSetSize, sum.get()); }
@Test public void testStreamWithoutMaxResult() { List<Post> posts = doInJPA(entityManager -> { try(Stream<Post> postStream = entityManager .createQuery( "select p " + "from Post p " + "order by p.createdOn desc", Post.class) .unwrap(Query.class) .stream() ) { return postStream.limit( 50 ).collect( Collectors.toList() ); } }); assertEquals(50, posts.size()); }
@Test public void testStream() { List<Post> posts = doInJPA(entityManager -> { try(Stream<Post> postStream = entityManager .createQuery( "select p " + "from Post p " + "order by p.createdOn desc", Post.class) .setHint(QueryHints.HINT_FETCH_SIZE, 50) .unwrap(Query.class) .stream() ) { return postStream .limit(50) .collect(Collectors.toList()); } }); assertEquals(50, posts.size()); }
@Test public void testUpgradeSkipLocked() { LOGGER.info("Test lock contention"); doInJPA(entityManager -> { List<Post> pendingPosts = entityManager.createQuery( "select p " + "from Post p " + "where p.status = :status", Post.class) .setParameter("status", PostStatus.PENDING) .setFirstResult(2) .unwrap(org.hibernate.Query.class) .setLockOptions(new LockOptions(LockMode.UPGRADE_SKIPLOCKED)) .list(); assertEquals(3, pendingPosts.size()); }); }