Refine search
@Test public void test_criteria_tuple_example() { doInJPA( this::entityManagerFactory, entityManager -> { //tag::criteria-tuple-example[] CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<Tuple> criteria = builder.createQuery( Tuple.class ); Root<Person> root = criteria.from( Person.class ); Path<Long> idPath = root.get( Person_.id ); Path<String> nickNamePath = root.get( Person_.nickName); criteria.multiselect( idPath, nickNamePath ); criteria.where( builder.equal( root.get( Person_.name ), "John Doe" ) ); List<Tuple> tuples = entityManager.createQuery( criteria ).getResultList(); for ( Tuple tuple : tuples ) { Long id = tuple.get( idPath ); String nickName = tuple.get( nickNamePath ); } //or using indices for ( Tuple tuple : tuples ) { Long id = (Long) tuple.get( 0 ); String nickName = (String) tuple.get( 1 ); } //end::criteria-tuple-example[] assertEquals(1, tuples.size()); }); }
@Override public Set<Entry<String, Object>> entrySet() { return tuple.getElements().stream() // .map(e -> new HashMap.SimpleEntry<String, Object>(e.getAlias(), tuple.get(e))) // .collect(Collectors.toSet()); } }
@Override public Collection<Object> values() { return Arrays.asList(tuple.toArray()); }
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Tuple> cq= cb.createTupleQuery(); Root<Documents> root = cq.from(Documents.class); Expression<Integer> userId = root.get("USERID"); Expression<String> userType = root.get("USERTYPE"); Expression<Long> count = cb.count(userId); cq.multiselect(userId.alias("USERID"), count.alias("CNT")); cq.where(cb.equal(userType, "COMPANY"); cq.groupBy(userId); cq.orderBy(cb.desc(count)); TypedQuery<Tuple> tq = em.createQuery(cq); for (Tuple t : tq.getResultsList()) { System.out.println(t.get("USERID")); System.out.println(t.get("CNT")); }
@Test public void test_criteria_group_by_example() { doInJPA( this::entityManagerFactory, entityManager -> { //tag::criteria-group-by-example[] CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<Tuple> criteria = builder.createQuery( Tuple.class ); Root<Person> root = criteria.from( Person.class ); criteria.groupBy(root.get("address")); criteria.multiselect(root.get("address"), builder.count(root)); List<Tuple> tuples = entityManager.createQuery( criteria ).getResultList(); for ( Tuple tuple : tuples ) { String name = (String) tuple.get( 0 ); Long count = (Long) tuple.get( 1 ); } //end::criteria-group-by-example[] assertEquals(2, tuples.size()); }); }
CriteriaQuery<Tuple> cq = builder.createTupleQuery(); // write the Root, Path elements as usual Root<EntityClazz> root = cq.from(EntityClazz.class); cq.multiselect(root.get(EntityClazz_.ID), root.get(EntityClazz_.VERSION)); //using metamodel List<Tuple> tupleResult = em.createQuery(cq).getResultList(); for (Tuple t : tupleResult) { Long id = (Long) t.get(0); Long version = (Long) t.get(1); }
private void findMatchingTagIds(String theResourceName, IIdType theResourceId, Set<Long> tagIds, Class<? extends BaseTag> entityClass) { { CriteriaBuilder builder = myEntityManager.getCriteriaBuilder(); CriteriaQuery<Tuple> cq = builder.createTupleQuery(); Root<? extends BaseTag> from = cq.from(entityClass); cq.multiselect(from.get("myTagId").as(Long.class)).distinct(true); if (theResourceName != null) { Predicate typePredicate = builder.equal(from.get("myResourceType"), theResourceName); if (theResourceId != null) { cq.where(typePredicate, builder.equal(from.get("myResourceId"), myIdHelperService.translateForcedIdToPid(theResourceName, theResourceId.getIdPart()))); } else { cq.where(typePredicate); } } TypedQuery<Tuple> query = myEntityManager.createQuery(cq); for (Tuple next : query.getResultList()) { tagIds.add(next.get(0, Long.class)); } } }
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Tuple> q = cb.createTupleQuery(); Root<Test> c = q.from(Test.class); q.multiselect(c.get("type"), cb.count(c)); q.groupBy(c.get("type")); TypedQuery<Tuple> t = em.createQuery(q); List<Tuple> resultList = t.getResultList(); for(Tuple tuple : resultList){ logger.info(tuple.get(0) + " " + tuple.get(1)); }
CriteriaQuery<Tuple> criteriaQuery = builder.createTupleQuery(); tupleRow.get(i++, Long.class), tupleRow.get(i++, String.class), tupleRow.get(i++, String.class), tupleRow.get(i++, String.class), tupleRow.get(i++, Status.class), tupleRow.get(i++, Integer.class), tupleRow.get(i++, Boolean.class), tupleRow.get(i++, String.class), tupleRow.get(i++, String.class), tupleRow.get(i++, Date.class), tupleRow.get(i++, Date.class), tupleRow.get(i++, Date.class), tupleRow.get(i++, String.class), tupleRow.get(i++, Long.class), tupleRow.get(i++, Long.class), tupleRow.get(i++, String.class), tupleRow.get(i++, SubTasksStrategy.class), tupleRow.get(i++, Long.class) );
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Tuple> cq = cb.createTupleQuery(); Root<ObjectMetadata> root = cq.from(ObjectMetadata.class); cq.multiselect( root.get("fileName").alias("filename"), cb.greatest(root.<Date>get("lastModified").alias("lastmodified") ); cq.groupBy(root.get("fileName")); List<Tuple> result = em.createQuery(cq).getResultList() for (Tuple t: result) { System.out.println(t.get("filename") + " " + t.get("lastmodified")); }
@Override public int size() { return tuple.getElements().size(); }
/** * If the key is not a {@code String} or not a key of the backing {@link Tuple} this returns {@code false}. * Otherwise this returns {@code true} even when the value from the backing {@code Tuple} is {@code null}. * * @param key the key for which to get the value from the map. * @return wether the key is an element of the backing tuple. */ @Override public boolean containsKey(Object key) { try { tuple.get((String) key); return true; } catch (IllegalArgumentException e) { return false; } }
@Override public boolean isEmpty() { return tuple.getElements().isEmpty(); }
/** * If the key is not a {@code String} or not a key of the backing {@link Tuple} this returns {@code null}. * Otherwise the value from the backing {@code Tuple} is returned, which also might be {@code null}. * * @param key the key for which to get the value from the map. * @return the value of the backing {@link Tuple} for that key or {@code null}. */ @Override @Nullable public Object get(Object key) { if (!(key instanceof String)) { return null; } try { return tuple.get((String) key); } catch (IllegalArgumentException e) { return null; } }
@Override public Object convert(Object source) { if (!(source instanceof Tuple)) { return source; } Tuple tuple = (Tuple) source; List<TupleElement<?>> elements = tuple.getElements(); if (elements.size() == 1) { Object value = tuple.get(elements.get(0)); if (type.isInstance(value) || value == null) { return value; } } return new TupleBackedMap(tuple); }
@Override public Set<String> keySet() { return tuple.getElements().stream() // .map(TupleElement::getAlias) // .collect(Collectors.toSet()); }
@Override public boolean containsValue(Object value) { return Arrays.asList(tuple.toArray()).contains(value); }
@Test public void testHibernateSelectClauseFunction() { doInJPA( this::entityManagerFactory, entityManager -> { //tag::hql-user-defined-function-postgresql-select-clause-example[] List<Tuple> books = entityManager.createQuery( "select b.title as title, apply_vat(b.priceCents) as price " + "from Book b " + "where b.author = :author ", Tuple.class ) .setParameter( "author", "Vlad Mihalcea" ) .getResultList(); assertEquals( 1, books.size() ); Tuple book = books.get( 0 ); assertEquals( "High-Performance Java Persistence", book.get( "title" ) ); assertEquals( 5400, ((Number) book.get( "price" )).intValue() ); //end::hql-user-defined-function-postgresql-select-clause-example[] }); }
private static Map<Integer, Integer> buildColumnSizesFromRows(List<Tuple> rows) { Map<Integer, Integer> columnSizes = new TreeMap<>(); for ( int i = 0; i < rows.size(); ++i ) { Tuple row = rows.get( i ); // on first row, handle columns if ( i == 0 ) { for ( int j = 0; j < row.getElements().size(); ++j ) { TupleElement<?> element = row.getElements().get( j ); columnSizes.put( j, element.getAlias().length() ); } } // handle values for ( int j = 0; j < row.getElements().size(); ++j ) { Object value = row.get( j ); int length = ( "" + value ).trim().length(); if ( length > columnSizes.get( j ) ) { columnSizes.put( j, length ); } } } return columnSizes; }
@Override public int size() { return tuple.getElements().size(); }