If you have the following entity:
{code:java} @Entity(name = "SomeEntity") @IdClass(SomeEntityPK.class) public static class SomeEntity {
@Id private long id;
@Id @ManyToOne private ReferencedEntity referencedEntity; } {code}
And the {{SomeEntityPK}} looks like this:
{code:java} public static class SomeEntityPK implements Serializable {
private Long id; private Long referencedEntity;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public Long getReferencedEntity() { return referencedEntity; }
public void setReferencedEntity(Long referencedEntity) { this.referencedEntity = referencedEntity; } } {code}
If we run the following test case:
{code:java} ReferencedEntity referencedEntity = new ReferencedEntity(); referencedEntity.setId( 42L );
SomeEntity someEntity = new SomeEntity(); someEntity.setId( 23L ); someEntity.setReferencedEntity( referencedEntity );
entityManager.merge( someEntity );
assertTrue( entityManager.contains( referencedEntity ) ); {code}
We now get an {{EntityNotfoundException}}.
{noformat} at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$JpaEntityNotFoundDelegate.handleEntityNotFound(EntityManagerFactoryBuilderImpl.java:159) at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227) at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:278) at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:121) at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:89) at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1242) at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1125) at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:663) at org.hibernate.type.EntityType.resolve(EntityType.java:448) at org.hibernate.type.EntityType.replace(EntityType.java:347) at org.hibernate.type.AbstractType.replace(AbstractType.java:144) at org.hibernate.type.TypeHelper.replace(TypeHelper.java:197) at org.hibernate.type.ComponentType.replace(ComponentType.java:562) at org.hibernate.type.TypeHelper.replace(TypeHelper.java:197) at org.hibernate.event.internal.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:431) at org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:233) at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:301) at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:170) {noformat}
However, this test runs fine on 5.2.12, so something has changed between 5.2.12 and 5.3.0.Beta1. |
|