A simple model that maps a collection through a unique column
{code:java} @Entity @Table(name = "base_object") public class BaseObject implements Serializable { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Column(name = "name", nullable = false, unique = true) private String name; @ManyToMany @JoinTable( name = "related_objects", joinColumns = @JoinColumn(name = "base_name", referencedColumnName = "name"), inverseJoinColumns = @JoinColumn(name = "related_name", referencedColumnName = "name") ) private Set<RelatedObject> related = new HashSet<>(); }
@Entity @Table(name = "related_object") public class RelatedObject { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Column(name = "name", nullable = false, unique = true) private String name; } {code}
When trying to add a {{RelatedObject}} reference to the collection, the flushing fails with a NULL constraint violation, although the proxy is lazily initialized.
{code:java} BaseObject b = entityManager.find(BaseObject.class, bId); RelatedObject r = entityManager.getReference(RelatedObject.class, rId); b.getRelated().add(r); entityManager.flush(); {code} Note that it works when using property mapping instead, so this seems to be related to the proxy not being narrowed before being accessed. |
|