use of org.hibernate.jpa.test.metamodel.Customer in project hibernate-orm by hibernate.
the class QueryBuilderTest method testMultiselectWithPredicates.
@Test
@TestForIssue(jiraKey = "HHH-8699")
// For now, restrict to H2. Selecting w/ predicate functions cause issues for too many dialects.
@RequiresDialect(value = H2Dialect.class, jiraKey = "HHH-9092")
public void testMultiselectWithPredicates() {
EntityManager em = getOrCreateEntityManager();
em.getTransaction().begin();
CriteriaBuilderImpl cb = (CriteriaBuilderImpl) em.getCriteriaBuilder();
CriteriaQuery<Customer> cq = cb.createQuery(Customer.class);
Root<Customer> r = cq.from(Customer.class);
cq.multiselect(r.get(Customer_.id), r.get(Customer_.name), cb.concat("Hello ", r.get(Customer_.name)), cb.isNotNull(r.get(Customer_.age)));
TypedQuery<Customer> tq = em.createQuery(cq);
tq.getResultList();
em.getTransaction().commit();
em.close();
}
use of org.hibernate.jpa.test.metamodel.Customer in project hibernate-orm by hibernate.
the class CriteriaCompilingTest method testTrimAChar.
@Test
@TestForIssue(jiraKey = "HHH-11393")
public void testTrimAChar() {
TransactionUtil.doInJPA(this::entityManagerFactory, entityManager -> {
final CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
final CriteriaQuery<Customer> query = criteriaBuilder.createQuery(Customer.class);
final Root<Customer> from = query.from(Customer.class);
query.select(from);
query.where(criteriaBuilder.equal(criteriaBuilder.trim(CriteriaBuilder.Trimspec.LEADING, criteriaBuilder.literal('R'), from.get("name")), " Vincent"));
List<Customer> resultList = entityManager.createQuery(query).getResultList();
assertThat(resultList.size(), is(1));
});
}
use of org.hibernate.jpa.test.metamodel.Customer in project hibernate-orm by hibernate.
the class ManipulationCriteriaTest method testJoinsAndFetchesDisallowed.
@Test
public void testJoinsAndFetchesDisallowed() {
EntityManager em = getOrCreateEntityManager();
em.getTransaction().begin();
CriteriaBuilder builder = em.getCriteriaBuilder();
{
try {
CriteriaDelete<Customer> deleteCriteria = builder.createCriteriaDelete(Customer.class);
Root<Customer> root = deleteCriteria.from(Customer.class);
root.join(Customer_.spouse);
em.createQuery(deleteCriteria).executeUpdate();
fail("Expected failure dues to attempt to join");
} catch (IllegalArgumentException expected) {
}
}
{
try {
CriteriaDelete<Customer> deleteCriteria = builder.createCriteriaDelete(Customer.class);
Root<Customer> root = deleteCriteria.from(Customer.class);
root.fetch(Customer_.spouse);
em.createQuery(deleteCriteria).executeUpdate();
fail("Expected failure dues to attempt to fetch");
} catch (IllegalArgumentException expected) {
}
}
{
try {
CriteriaUpdate<Customer> updateCriteria = builder.createCriteriaUpdate(Customer.class);
Root<Customer> root = updateCriteria.from(Customer.class);
root.join(Customer_.spouse);
em.createQuery(updateCriteria).executeUpdate();
fail("Expected failure dues to attempt to join");
} catch (IllegalArgumentException expected) {
}
}
{
try {
CriteriaUpdate<Customer> updateCriteria = builder.createCriteriaUpdate(Customer.class);
Root<Customer> root = updateCriteria.from(Customer.class);
root.fetch(Customer_.spouse);
em.createQuery(updateCriteria).executeUpdate();
fail("Expected failure dues to attempt to fetch");
} catch (IllegalArgumentException expected) {
}
}
em.getTransaction().commit();
em.close();
}
use of org.hibernate.jpa.test.metamodel.Customer in project hibernate-orm by hibernate.
the class ManipulationCriteriaTest method testDeleteWithUnCorrelatedSubquery.
@Test
// MySQL does not allow "delete/update from" and subqueries to use the same table
@SkipForDialect(MySQLDialect.class)
public void testDeleteWithUnCorrelatedSubquery() {
CriteriaBuilder builder = entityManagerFactory().getCriteriaBuilder();
EntityManager em = getOrCreateEntityManager();
em.getTransaction().begin();
// attempt to delete Customers who's age is less than the AVG age
CriteriaDelete<Customer> criteria = builder.createCriteriaDelete(Customer.class);
Root<Customer> customerRoot = criteria.from(Customer.class);
Subquery<Double> subCriteria = criteria.subquery(Double.class);
Root<Customer> subQueryCustomerRoot = subCriteria.from(Customer.class);
subCriteria.select(builder.avg(subQueryCustomerRoot.get(Customer_.age)));
// also illustrates the new capability to use the subquery selection as an expression!
criteria.where(builder.lessThan(customerRoot.get(Customer_.age), subCriteria.getSelection().as(Integer.class)));
// make sure Subquery#getParent fails...
try {
subCriteria.getParent();
fail("Expecting Subquery.getParent call to fail on DELETE containing criteria");
} catch (IllegalStateException expected) {
}
Query query = em.createQuery(criteria);
try {
// first, make sure an attempt to list fails
query.getResultList();
fail("Attempt to getResultList() on delete criteria should have failed");
} catch (IllegalStateException expected) {
}
query.executeUpdate();
em.getTransaction().commit();
em.close();
}
use of org.hibernate.jpa.test.metamodel.Customer in project hibernate-orm by hibernate.
the class CorrelatedSubqueryTest method testRestrictedCorrelationNoExplicitSelection.
@Test
public void testRestrictedCorrelationNoExplicitSelection() {
CriteriaBuilder builder = entityManagerFactory().getCriteriaBuilder();
EntityManager em = getOrCreateEntityManager();
em.getTransaction().begin();
CriteriaQuery<Order> criteria = builder.createQuery(Order.class);
Root<Order> orderRoot = criteria.from(Order.class);
criteria.select(orderRoot);
// create correlated subquery
Subquery<Customer> customerSubquery = criteria.subquery(Customer.class);
Root<Order> orderRootCorrelation = customerSubquery.correlate(orderRoot);
Join<Order, Customer> orderCustomerJoin = orderRootCorrelation.join("customer");
customerSubquery.where(builder.like(orderCustomerJoin.<String>get("name"), "%Caruso"));
criteria.where(builder.exists(customerSubquery));
em.createQuery(criteria).getResultList();
em.getTransaction().commit();
em.close();
}
Aggregations