/* * 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.userguide.util; import javax.persistence.EntityManager; import org.junit.Test; import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase; import org.hibernate.proxy.HibernateProxy; import org.hibernate.testing.TestForIssue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** * @author Emmanuel Bernard */ public class GetIdentifierTest extends BaseEntityManagerFunctionalTestCase { @Test public void testSimpleId() { EntityManager em = entityManagerFactory().createEntityManager(); em.getTransaction().begin(); try { Book book = new Book(); em.persist( book ); em.flush(); assertEquals( book.getId(), em.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier( book ) ); } finally { em.getTransaction().rollback(); em.close(); } } @Test @TestForIssue(jiraKey = "HHH-7561") public void testProxyObject() { EntityManager em = entityManagerFactory().createEntityManager(); em.getTransaction().begin(); try { Book book = new Book(); em.persist( book ); em.flush(); em.clear(); // Clear persistence context to receive proxy object below. Book proxy = em.getReference( Book.class, book.getId() ); assertTrue( proxy instanceof HibernateProxy ); assertEquals( book.getId(), em.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier( proxy ) ); } finally { em.getTransaction().rollback(); em.close(); } em = entityManagerFactory().createEntityManager(); em.getTransaction().begin(); try { Author author = new Author(); Article article = new Article( author ); em.persist( author ); em.persist( article ); em.flush(); em.clear(); // Clear persistence context to receive proxy relation below. article = em.find( Article.class, article.getId() ); assertTrue( article.getAuthor() instanceof HibernateProxy ); assertEquals( author.getId(), em.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier( article.getAuthor() ) ); } finally { em.getTransaction().rollback(); em.close(); } } @Test public void testEmbeddedId() { EntityManager em = entityManagerFactory().createEntityManager(); em.getTransaction().begin(); try { Umbrella umbrella = new Umbrella(); umbrella.setId( new Umbrella.PK() ); umbrella.getId().setBrand( "Burberry" ); umbrella.getId().setModel( "Red Hat" ); em.persist( umbrella ); em.flush(); assertEquals( umbrella.getId(), em.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier( umbrella ) ); } finally { em.getTransaction().rollback(); em.close(); } } @Test public void testIdClass() { EntityManager em = entityManagerFactory().createEntityManager(); em.getTransaction().begin(); try { Sickness sick = new Sickness(); sick.setClassification( "H1N1" ); sick.setType( "Flu" ); em.persist( sick ); em.flush(); Sickness.PK id = new Sickness.PK(); id.setClassification( sick.getClassification() ); id.setType( sick.getType() ); assertEquals( id, em.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier( sick ) ); } finally { em.getTransaction().rollback(); em.close(); } } @Override public Class[] getAnnotatedClasses() { return new Class[] { Book.class, Umbrella.class, Sickness.class, Author.class, Article.class }; } }