HHH-7561 - Fix and test
This commit is contained in:
parent
6c6df69535
commit
b11c23fd45
|
@ -328,6 +328,9 @@ public abstract class AbstractEntityTuplizer implements EntityTuplizer {
|
|||
if ( entityMetamodel.getIdentifierProperty().isEmbedded() ) {
|
||||
id = entity;
|
||||
}
|
||||
else if ( HibernateProxy.class.isInstance( entity ) ) {
|
||||
id = ( (HibernateProxy) entity ).getHibernateLazyInitializer().getIdentifier();
|
||||
}
|
||||
else {
|
||||
if ( idGetter == null ) {
|
||||
if (identifierMapperType==null) {
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
package org.hibernate.jpa.test.util;
|
||||
|
||||
import java.io.Serializable;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.ManyToOne;
|
||||
|
||||
/**
|
||||
* @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
|
||||
*/
|
||||
@Entity
|
||||
public class Article implements Serializable {
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private Integer id;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
private Author author;
|
||||
|
||||
public Article() {
|
||||
}
|
||||
|
||||
public Article(Author author) {
|
||||
this.author = author;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Author getAuthor() {
|
||||
return author;
|
||||
}
|
||||
|
||||
public void setAuthor(Author author) {
|
||||
this.author = author;
|
||||
}
|
||||
}
|
|
@ -28,8 +28,11 @@ 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
|
||||
|
@ -47,6 +50,36 @@ public class GetIdentifierTest extends BaseEntityManagerFunctionalTestCase {
|
|||
em.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestForIssue(jiraKey = "HHH-7561")
|
||||
public void testProxyObject() {
|
||||
EntityManager em = entityManagerFactory().createEntityManager();
|
||||
em.getTransaction().begin();
|
||||
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 ) );
|
||||
em.getTransaction().rollback();
|
||||
em.close();
|
||||
|
||||
em = entityManagerFactory().createEntityManager();
|
||||
em.getTransaction().begin();
|
||||
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() ) );
|
||||
em.getTransaction().rollback();
|
||||
em.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEmbeddedId() {
|
||||
EntityManager em = entityManagerFactory().createEntityManager();
|
||||
|
@ -86,7 +119,8 @@ public class GetIdentifierTest extends BaseEntityManagerFunctionalTestCase {
|
|||
Book.class,
|
||||
Umbrella.class,
|
||||
Sickness.class,
|
||||
Author.class
|
||||
Author.class,
|
||||
Article.class
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue