Hi Gail,

The mapping is IMO invalid. For removal etc. to work properly, the direction 
needs to be deducible. However, I’ve observed this mapping as a  workaround for 
supporting lazy loading on either side of the association, prior to our fixes 
in 5.4 with HHH-12842 [1] .  The mapping works  in my experience,  but with 
quirks that are to be expected. With Hibernate 5.4 there is no reason to map 
this at all: if the association is non-optional and non-nullable, also the 
non-owning side of the association can be lazy loaded.



Kind regards,

Jan-Willem


[1] https://github.com/hibernate/hibernate-orm/pull/2612


On 15 Jan 2020, at 05:18, Gail Badner 
<gbad...@redhat.com<mailto:gbad...@redhat.com>> wrote:

Hi,

Does Hibernate support having both entities involved in a one-to-one
association own its side of the association when using
@PrimaryKeyJoinColumn?

My guess is that this is not supported by Hibernate. I just want to confirm.

For example:

@Entity
public class Employee {

   @EmbeddedId
   private CompositeKey id;

   @OneToOne(optional = false)
   @PrimaryKeyJoinColumns({
         @PrimaryKeyJoinColumn(name = "ID1", referencedColumnName = "ID1"),
         @PrimaryKeyJoinColumn(name = "ID2", referencedColumnName =
"ID2"), })
   })
   private EmployeeInfo employeeInfo;
   ...
}

@Entity
public class EmployeeInfo {

   @EmbeddedId
   private CompositeKey id;

   @OneToOne(optional = false)
   @PrimaryKeyJoinColumns({
         @PrimaryKeyJoinColumn(name = "ID1", referencedColumnName = "ID1"),
         @PrimaryKeyJoinColumn(name = "ID2", referencedColumnName =
"ID2"), })
   })
   private Employee employee;
...
}

In this particular case, the foreign keys have been deleted, so it's
possible to load and delete these entities.

An attempt to insert an entity on either side results in:
org.hibernate.PropertyValueException: not-null property references a null
or transient value

When converted to use @MapsId and @JoinColumns instead, Hibernate throws:
org.hibernate.MappingException: cyclic dependency in derived identities

Please let me know...

Thanks,
Gail
_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org<mailto:hibernate-dev@lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/hibernate-dev

_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to