/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.jpa.test.criteria.components; import java.util.List; import java.util.Set; import javax.persistence.EntityManager; import javax.persistence.Query; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Fetch; import javax.persistence.criteria.Root; import org.junit.Assert; import org.junit.Test; import org.hibernate.Hibernate; import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase; import org.hibernate.testing.TestForIssue; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** * @author alan.oleary */ public class ComponentCriteriaTest extends BaseEntityManagerFunctionalTestCase { @Override public Class[] getAnnotatedClasses() { return new Class[] { Client.class, Alias.class }; } @Test public void testEmbeddableInPath() { EntityManager em = getOrCreateEntityManager(); em.getTransaction().begin(); Client client = new Client( 111, "steve", "ebersole" ); em.persist(client); em.getTransaction().commit(); em.close(); em = getOrCreateEntityManager(); em.getTransaction().begin(); CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Client> cq = cb.createQuery(Client.class); Root<Client> root = cq.from(Client.class); cq.where(cb.equal(root.get("name").get("firstName"), client.getName().getFirstName())); List<Client> list = em.createQuery(cq).getResultList(); Assert.assertEquals( 1, list.size() ); em.getTransaction().commit(); em.close(); // HHH-5792 em = getOrCreateEntityManager(); em.getTransaction().begin(); TypedQuery< Client > q = em.createQuery( "SELECT c FROM Client c JOIN c.name n WHERE n.firstName = '" + client.getName().getFirstName() + "'", Client.class ); Assert.assertEquals( 1, q.getResultList().size() ); em.getTransaction().commit(); em.close(); em = getOrCreateEntityManager(); em.getTransaction().begin(); em.createQuery( "delete Client" ).executeUpdate(); em.getTransaction().commit(); em.close(); } @Test @TestForIssue( jiraKey = "HHH-9642") public void testOneToManyJoinFetchedInEmbeddable() { EntityManager em = getOrCreateEntityManager(); em.getTransaction().begin(); Client client = new Client( 111, "steve", "ebersole" ); Alias alias = new Alias( "a", "guy", "work" ); client.getName().getAliases().add( alias ); em.persist(client); em.getTransaction().commit(); em.close(); em = getOrCreateEntityManager(); em.getTransaction().begin(); CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Client> cq = cb.createQuery(Client.class); Root<Client> root = cq.from(Client.class); root.fetch( Client_.name ).fetch( Name_.aliases ); cq.where(cb.equal(root.get("name").get("firstName"), client.getName().getFirstName())); List<Client> list = em.createQuery(cq).getResultList(); Assert.assertEquals( 1, list.size() ); client = list.get( 0 ); assertTrue( Hibernate.isInitialized( client.getName().getAliases() ) ); em.getTransaction().commit(); em.close(); em = getOrCreateEntityManager(); em.getTransaction().begin(); TypedQuery< Client > q = em.createQuery( "SELECT c FROM Client c JOIN FETCH c.name.aliases WHERE c.name.firstName = '" + client.getName().getFirstName() + "'", Client.class ); Assert.assertEquals( 1, q.getResultList().size() ); client = list.get( 0 ); assertTrue( Hibernate.isInitialized( client.getName().getAliases() ) ); em.getTransaction().commit(); em.close(); em = getOrCreateEntityManager(); em.getTransaction().begin(); q = em.createQuery( "SELECT c FROM Client c JOIN c.name n join FETCH n.aliases WHERE c.name.firstName = '" + client.getName().getFirstName() + "'", Client.class ); Assert.assertEquals( 1, q.getResultList().size() ); client = list.get( 0 ); assertTrue( Hibernate.isInitialized( client.getName().getAliases() ) ); em.getTransaction().commit(); em.close(); em = getOrCreateEntityManager(); em.getTransaction().begin(); client = em.merge( client ); em.remove( client ); em.getTransaction().commit(); em.close(); } @Test @TestForIssue( jiraKey = "HHH-4586" ) public void testParameterizedFunctions() { EntityManager em = getOrCreateEntityManager(); em.getTransaction().begin(); CriteriaBuilder cb = em.getCriteriaBuilder(); // lower CriteriaQuery<Client> cq = cb.createQuery( Client.class ); Root<Client> root = cq.from( Client.class ); cq.where( cb.equal( cb.lower( root.get( Client_.name ).get( Name_.lastName ) ),"test" ) ); em.createQuery( cq ).getResultList(); // upper cq = cb.createQuery( Client.class ); root = cq.from( Client.class ); cq.where( cb.equal( cb.upper( root.get( Client_.name ).get( Name_.lastName ) ),"test" ) ); em.createQuery( cq ).getResultList(); em.getTransaction().commit(); em.close(); } }