use of org.jpwh.model.querying.Bid in project microservices by pwillhan.
the class Restriction method executeQueries.
@Test
public void executeQueries() throws Exception {
TestDataCategoriesItems testData = storeTestData();
CriteriaBuilder cb = JPA.getEntityManagerFactory().getCriteriaBuilder();
UserTransaction tx = TM.getUserTransaction();
try {
tx.begin();
EntityManager em = JPA.createEntityManager();
{
// select i from Item i where i.name = 'Foo'
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
criteria.select(i).where(cb.equal(i.get("name"), "Foo"));
TypedQuery<Item> q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 1);
assertEquals(q.getResultList().iterator().next().getName(), "Foo");
}
em.clear();
{
// Equals boolean
CriteriaQuery criteria = cb.createQuery();
Root<User> u = criteria.from(User.class);
criteria.select(u).where(cb.equal(u.get("activated"), true));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 2);
}
em.clear();
{
// Between
CriteriaQuery criteria = cb.createQuery();
Root<Bid> b = criteria.from(Bid.class);
criteria.select(b).where(cb.between(// Type of path required!
b.<BigDecimal>get("amount"), // Must be same type!
new BigDecimal("99"), // Must be same type!
new BigDecimal("110")));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 3);
}
em.clear();
{
// Greater than
CriteriaQuery criteria = cb.createQuery();
Root<Bid> b = criteria.from(Bid.class);
criteria.select(b).where(// gt() only works with Number, use greaterThan() otherwise!
cb.gt(b.<BigDecimal>get("amount"), new BigDecimal("100")));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 1);
}
em.clear();
{
// Greater than with date (!Number)
Date tomorrowDate = CalendarUtil.TOMORROW.getTime();
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
criteria.select(i).where(cb.greaterThan(i.<Date>get("auctionEnd"), tomorrowDate));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 1);
}
em.clear();
{
// IN list
CriteriaQuery criteria = cb.createQuery();
Root<User> u = criteria.from(User.class);
criteria.select(u).where(cb.<String>in(u.<String>get("username")).value("johndoe").value("janeroe"));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 2);
}
em.clear();
{
// Enum
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
criteria.select(i).where(cb.equal(i.<AuctionType>get("auctionType"), AuctionType.HIGHEST_BID));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 3);
}
em.clear();
{
// Ternary operators
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
criteria.select(i).where(cb.isNull(i.get("buyNowPrice")));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 2);
}
em.clear();
{
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
criteria.select(i).where(cb.isNotNull(i.get("buyNowPrice")));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 1);
}
em.clear();
{
// String matching
CriteriaQuery criteria = cb.createQuery();
Root<User> u = criteria.from(User.class);
criteria.select(u).where(cb.like(u.<String>get("username"), "john%"));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 1);
}
{
// String matching
CriteriaQuery criteria = cb.createQuery();
Root<User> u = criteria.from(User.class);
criteria.select(u).where(cb.like(u.<String>get("username"), "john%").not());
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 2);
}
em.clear();
{
CriteriaQuery criteria = cb.createQuery();
Root<User> u = criteria.from(User.class);
criteria.select(u).where(cb.like(u.<String>get("username"), "%oe%"));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 3);
}
em.clear();
{
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
criteria.select(i).where(cb.like(i.<String>get("name"), "Name\\_with\\_underscores", '\\'));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 0);
}
em.clear();
{
// Arithmetic
CriteriaQuery criteria = cb.createQuery();
Root<Bid> b = criteria.from(Bid.class);
criteria.select(b).where(cb.gt(cb.diff(cb.quot(b.<BigDecimal>get("amount"), 2), 0.5), 49));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 2);
}
em.clear();
{
// Logical groups
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
Predicate predicate = cb.and(cb.like(i.<String>get("name"), "Fo%"), cb.isNotNull(i.get("buyNowPrice")));
predicate = cb.or(predicate, cb.equal(i.<String>get("name"), "Bar"));
criteria.select(i).where(predicate);
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 2);
}
em.clear();
{
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
criteria.select(i).where(cb.like(i.<String>get("name"), "Fo%"), // AND
cb.isNotNull(i.get("buyNowPrice")));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 1);
}
em.clear();
{
// Collection functions
CriteriaQuery criteria = cb.createQuery();
Root<Category> c = criteria.from(Category.class);
criteria.select(c).where(cb.isNotEmpty(c.<Collection>get("items")));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 2);
}
em.clear();
{
// Collection functions
CriteriaQuery criteria = cb.createQuery();
Root<Category> c = criteria.from(Category.class);
criteria.select(c).where(cb.isMember(cb.parameter(Item.class, "item"), c.<Collection<Item>>get("items")));
Query q = em.createQuery(criteria);
Item item = em.find(Item.class, testData.items.getFirstId());
q.setParameter("item", item);
List<Category> result = q.getResultList();
assertEquals(result.size(), 1);
}
em.clear();
{
// Collection functions
CriteriaQuery criteria = cb.createQuery();
Root<Category> c = criteria.from(Category.class);
criteria.select(c).where(cb.gt(cb.size(c.<Collection>get("items")), 1));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 1);
}
em.clear();
{
// Calling functions
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
criteria.select(i).where(cb.like(cb.lower(i.<String>get("name")), "ba%"));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 2);
}
em.clear();
{
// Ordering result
CriteriaQuery criteria = cb.createQuery();
Root<User> u = criteria.from(User.class);
criteria.select(u).orderBy(cb.desc(u.get("username")));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 3);
}
em.clear();
{
// Ordering result
CriteriaQuery criteria = cb.createQuery();
Root<User> u = criteria.from(User.class);
criteria.select(u).orderBy(cb.desc(u.get("activated")), cb.asc(u.get("username")));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 3);
}
tx.commit();
em.close();
} finally {
TM.rollback();
}
}
use of org.jpwh.model.querying.Bid in project microservices by pwillhan.
the class Projection method executeQueries.
@Test
public void executeQueries() throws Exception {
TestDataCategoriesItems testData = storeTestData();
UserTransaction tx = TM.getUserTransaction();
try {
tx.begin();
EntityManager em = JPA.createEntityManager();
{
Query query = em.createNamedQuery("product");
List<Object[]> result = query.getResultList();
Set<Item> items = new HashSet();
Set<Bid> bids = new HashSet();
for (Object[] row : result) {
assertTrue(row[0] instanceof Item);
items.add((Item) row[0]);
assertTrue(row[1] instanceof Bid);
bids.add((Bid) row[1]);
}
assertEquals(items.size(), 3);
assertEquals(bids.size(), 4);
// Cartesian product!
assertEquals(result.size(), 12);
}
em.clear();
{
Query q = em.createNamedQuery("scalarProduct");
List<Object[]> result = q.getResultList();
assertEquals(result.size(), 3);
Set<Long> ids = new HashSet();
Set<String> names = new HashSet();
Set<BigDecimal> prices = new HashSet();
for (Object[] row : result) {
assertTrue(row[0] instanceof Long);
ids.add((Long) row[0]);
assertTrue(row[1] instanceof String);
names.add((String) row[1]);
assertTrue(row[2] == null || row[2] instanceof BigDecimal);
prices.add((BigDecimal) row[2]);
}
assertEquals(ids.size(), 3, "ids");
assertEquals(names.size(), 3, "names");
assertEquals(prices.size(), 2, "prices");
}
em.clear();
{
Query q = em.createNamedQuery("transient");
List<Object[]> result = q.getResultList();
assertEquals(result.size(), 3);
Object[] firstRow = result.get(0);
assertTrue(firstRow[0] instanceof Long);
assertTrue(firstRow[1] instanceof String);
assertTrue(firstRow[2] instanceof Address);
}
em.clear();
{
Query q = em.createNamedQuery("distinct");
assertEquals(q.getResultList().size(), 3);
}
em.clear();
{
Query q = em.createNamedQuery("dynamicInstance");
List<ItemSummary> result = q.getResultList();
assertEquals(result.size(), 3);
}
// All following are more function call examples, with variations
em.clear();
{
Query q = em.createNamedQuery("concat");
assertEquals(q.getResultList().size(), 3);
}
em.clear();
{
Query q = em.createNamedQuery("coalesce");
List<Object[]> result = q.getResultList();
assertEquals(result.size(), 3);
for (Object[] row : result) {
assertTrue(row[0] instanceof String);
// Never NULL!
assertTrue(row[1] instanceof BigDecimal);
}
}
em.clear();
{
Query q = em.createNamedQuery("caseWhen");
List<Object[]> result = q.getResultList();
assertEquals(result.size(), 3);
for (Object[] row : result) {
assertTrue(row[0] instanceof String);
assertTrue(row[1] instanceof String);
}
}
em.clear();
{
Query query = em.createNamedQuery("count");
Long count = (Long) query.getSingleResult();
assertEquals(count, new Long(3));
}
em.clear();
{
Query q = em.createNamedQuery("countDistinct");
Long count = (Long) q.getSingleResult();
assertEquals(count, new Long(3));
}
em.clear();
{
Query q = em.createNamedQuery("sum");
BigDecimal sum = (BigDecimal) q.getSingleResult();
assertEquals(sum.toString(), "304.99");
}
em.clear();
{
Query q = em.createNamedQuery("minMax");
q.setParameter("itemId", testData.items.getFirstId());
Object[] result = (Object[]) q.getSingleResult();
assertEquals(((BigDecimal) result[0]).compareTo(new BigDecimal("99")), 0);
assertEquals(((BigDecimal) result[1]).compareTo(new BigDecimal("101")), 0);
}
em.clear();
tx.commit();
em.close();
} finally {
TM.rollback();
}
}
use of org.jpwh.model.querying.Bid in project microservices by pwillhan.
the class HibernateCriteria method foo.
@Test
public void foo() throws Exception {
TestDataCategoriesItems testData = storeTestData();
UserTransaction tx = TM.getUserTransaction();
try {
tx.begin();
EntityManager em = JPA.createEntityManager();
Session session = em.unwrap(Session.class);
{
List<Object[]> result = session.createCriteria(Bid.class, "b").createAlias("item", "i", JoinType.RIGHT_OUTER_JOIN).add(Restrictions.or(Restrictions.isNull("b.id"), Restrictions.gt("amount", new BigDecimal(100)))).setResultTransformer(Criteria.PROJECTION).list();
assertEquals(result.size(), 2);
// Criteria quirk: the root entity alias is always last in the result tuple
assertTrue(result.get(0)[0] instanceof Item);
assertTrue(result.get(0)[1] instanceof Bid);
assertTrue(result.get(1)[0] instanceof Item);
assertEquals(result.get(1)[1], null);
}
em.clear();
tx.commit();
em.close();
} finally {
TM.rollback();
}
}
use of org.jpwh.model.querying.Bid in project microservices by pwillhan.
the class Projection method executeQueries.
@Test
public void executeQueries() throws Exception {
TestDataCategoriesItems testData = storeTestData();
CriteriaBuilder cb = JPA.getEntityManagerFactory().getCriteriaBuilder();
UserTransaction tx = TM.getUserTransaction();
try {
tx.begin();
EntityManager em = JPA.createEntityManager();
{
// Product
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
Root<Bid> b = criteria.from(Bid.class);
criteria.select(cb.tuple(i, b));
/* Convenient alternative:
criteria.multiselect(
criteria.from(Item.class),
criteria.from(Bid.class)
);
*/
Query q = em.createQuery(criteria);
List<Object[]> result = q.getResultList();
// Cartesian product!
assertEquals(result.size(), 12);
Set<Item> items = new HashSet();
Set<Bid> bids = new HashSet();
for (Object[] row : result) {
assertTrue(row[0] instanceof Item);
items.add((Item) row[0]);
assertTrue(row[1] instanceof Bid);
bids.add((Bid) row[1]);
}
assertEquals(items.size(), 3);
assertEquals(bids.size(), 4);
}
em.clear();
{
// Transient result
CriteriaQuery criteria = cb.createQuery();
Root<User> u = criteria.from(User.class);
// Returns List of Object[]
criteria.multiselect(u.get("id"), u.get("username"), u.get("homeAddress"));
Query q = em.createQuery(criteria);
List<Object[]> result = q.getResultList();
assertEquals(result.size(), 3);
Object[] firstRow = result.get(0);
assertTrue(firstRow[0] instanceof Long);
assertTrue(firstRow[1] instanceof String);
assertTrue(firstRow[2] instanceof Address);
}
em.clear();
{
// Distinct
CriteriaQuery<String> criteria = cb.createQuery(String.class);
criteria.select(criteria.from(Item.class).<String>get("name"));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 3);
}
em.clear();
{
// Distinct
CriteriaQuery<String> criteria = cb.createQuery(String.class);
criteria.select(criteria.from(Item.class).<String>get("name"));
criteria.distinct(true);
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 3);
}
em.clear();
{
// Dynamic instance creation
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
criteria.select(cb.construct(// Must have the right constructor!
ItemSummary.class, i.get("id"), i.get("name"), i.get("auctionEnd")));
Query q = em.createQuery(criteria);
List<ItemSummary> result = q.getResultList();
assertEquals(result.size(), 3);
}
em.clear();
{
// Tuple API
CriteriaQuery<Tuple> criteria = cb.createTupleQuery();
// Or: CriteriaQuery<Tuple> criteria = cb.createQuery(Tuple.class);
criteria.multiselect(// Aliases optional!
criteria.from(Item.class).alias("i"), criteria.from(Bid.class).alias("b"));
TypedQuery<Tuple> query = em.createQuery(criteria);
List<Tuple> result = query.getResultList();
Set<Item> items = new HashSet();
Set<Bid> bids = new HashSet();
for (Tuple tuple : result) {
// Indexed
Item item = tuple.get(0, Item.class);
Bid bid = tuple.get(1, Bid.class);
// Alias
item = tuple.get("i", Item.class);
bid = tuple.get("b", Bid.class);
// Meta
for (TupleElement<?> element : tuple.getElements()) {
Class clazz = element.getJavaType();
String alias = element.getAlias();
Object value = tuple.get(element);
}
items.add(item);
bids.add(bid);
}
// Cartesian product!
assertEquals(result.size(), 12);
assertEquals(items.size(), 3);
assertEquals(bids.size(), 4);
}
em.clear();
// All following are more function call examples, with variations
{
// Concat
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
criteria.select(cb.concat(cb.concat(i.<String>get("name"), ":"), // Note the cast of Date!
i.<String>get("auctionEnd")));
Query q = em.createQuery(criteria);
assertEquals(q.getResultList().size(), 3);
}
em.clear();
{
// Coalesce
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
criteria.multiselect(i.get("name"), cb.coalesce(i.<BigDecimal>get("buyNowPrice"), 0));
Query q = em.createQuery(criteria);
List<Object[]> result = q.getResultList();
assertEquals(result.size(), 3);
for (Object[] row : result) {
assertTrue(row[0] instanceof String);
// Never NULL!
assertTrue(row[1] instanceof BigDecimal);
}
}
em.clear();
{
// Case When
/*
CriteriaQuery criteria = cb.createQuery();
TODO String literals not supported, Hibernate bug HHH-8124
Root<User> u = criteria.from(User.class);
criteria.multiselect(
u.get("username"),
cb.selectCase()
.when(
cb.equal(
cb.length(u.get("homeAddress").<String>get("zipcode")), 5
), "Germany"
)
.when(
cb.equal(
cb.length(u.get("homeAddress").<String>get("zipcode")), 4
), "Switzerland"
)
.otherwise("Other")
);
Query q = em.createQuery(criteria);
List<Object[]> result = q.getResultList();
assertEquals(result.size(), 3);
for (Object[] row : result) {
assertTrue(row[0] instanceof String);
assertTrue(row[1] instanceof String);
}
*/
}
em.clear();
{
// Count
CriteriaQuery criteria = cb.createQuery();
criteria.select(cb.count(criteria.from(Item.class)));
Query q = em.createQuery(criteria);
Long count = (Long) q.getSingleResult();
assertEquals(count, new Long(3));
}
em.clear();
{
// count(distinct ...)
CriteriaQuery criteria = cb.createQuery();
criteria.select(cb.countDistinct(criteria.from(Item.class).get("name")));
Query q = em.createQuery(criteria);
Long count = (Long) q.getSingleResult();
assertEquals(count, new Long(3));
}
em.clear();
{
// Sum
CriteriaQuery<Number> criteria = cb.createQuery(Number.class);
criteria.select(cb.sum(criteria.from(Bid.class).<BigDecimal>get("amount")));
Query q = em.createQuery(criteria);
BigDecimal sum = (BigDecimal) q.getSingleResult();
assertEquals(sum.compareTo(new BigDecimal("304.99")), 0);
}
em.clear();
{
// Min/Max
CriteriaQuery criteria = cb.createQuery();
Root<Bid> b = criteria.from(Bid.class);
criteria.multiselect(cb.min(b.<BigDecimal>get("amount")), cb.max(b.<BigDecimal>get("amount")));
criteria.where(cb.equal(b.get("item").<Long>get("id"), cb.parameter(Long.class, "itemId")));
Query q = em.createQuery(criteria);
q.setParameter("itemId", testData.items.getFirstId());
Object[] result = (Object[]) q.getSingleResult();
assertEquals(((BigDecimal) result[0]).compareTo(new BigDecimal("99")), 0);
assertEquals(((BigDecimal) result[1]).compareTo(new BigDecimal("101")), 0);
}
em.clear();
tx.commit();
em.close();
} finally {
TM.rollback();
}
}
use of org.jpwh.model.querying.Bid in project microservices by pwillhan.
the class Subselects method executeQueries.
@Test
public void executeQueries() throws Exception {
TestDataCategoriesItems testData = storeTestData();
CriteriaBuilder cb = JPA.getEntityManagerFactory().getCriteriaBuilder();
UserTransaction tx = TM.getUserTransaction();
try {
tx.begin();
EntityManager em = JPA.createEntityManager();
{
// Correlated
CriteriaQuery criteria = cb.createQuery();
Root<User> u = criteria.from(User.class);
Subquery<Long> sq = criteria.subquery(Long.class);
Root<Item> i = sq.from(Item.class);
sq.select(cb.count(i)).where(cb.equal(i.get("seller"), u));
criteria.select(u);
criteria.where(cb.greaterThan(sq, 1L));
Query q = em.createQuery(criteria);
List<User> result = q.getResultList();
assertEquals(result.size(), 1);
User user = result.iterator().next();
assertEquals(user.getId(), testData.users.getFirstId());
}
em.clear();
{
// Uncorrelated
CriteriaQuery criteria = cb.createQuery();
Root<Bid> b = criteria.from(Bid.class);
Subquery<BigDecimal> sq = criteria.subquery(BigDecimal.class);
Root<Bid> b2 = sq.from(Bid.class);
sq.select(cb.max(b2.<BigDecimal>get("amount")));
criteria.select(b);
criteria.where(cb.greaterThanOrEqualTo(cb.sum(b.<BigDecimal>get("amount"), new BigDecimal(1)), sq));
Query q = em.createQuery(criteria);
List<Bid> result = q.getResultList();
assertEquals(result.size(), 2);
}
em.clear();
{
// Exists
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
Subquery<Bid> sq = criteria.subquery(Bid.class);
Root<Bid> b = sq.from(Bid.class);
sq.select(b).where(cb.equal(b.get("item"), i));
criteria.select(i);
criteria.where(cb.exists(sq));
Query q = em.createQuery(criteria);
List<Item> result = q.getResultList();
assertEquals(result.size(), 2);
}
em.clear();
{
// Quantify ALL
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
Subquery<BigDecimal> sq = criteria.subquery(BigDecimal.class);
Root<Bid> b = sq.from(Bid.class);
sq.select(b.<BigDecimal>get("amount"));
sq.where(cb.equal(b.get("item"), i));
criteria.select(i);
criteria.where(cb.greaterThanOrEqualTo(cb.literal(new BigDecimal(10)), cb.all(sq)));
Query q = em.createQuery(criteria);
List<Item> result = q.getResultList();
assertEquals(result.size(), 2);
}
em.clear();
{
// Quantify ANY
CriteriaQuery criteria = cb.createQuery();
Root<Item> i = criteria.from(Item.class);
Subquery<BigDecimal> sq = criteria.subquery(BigDecimal.class);
Root<Bid> b = sq.from(Bid.class);
sq.select(b.<BigDecimal>get("amount"));
sq.where(cb.equal(b.get("item"), i));
criteria.select(i);
criteria.where(cb.equal(cb.literal(new BigDecimal("101.00")), cb.any(sq)));
Query q = em.createQuery(criteria);
List<Item> result = q.getResultList();
assertEquals(result.size(), 1);
}
em.clear();
tx.commit();
em.close();
} finally {
TM.rollback();
}
}
Aggregations