[
https://issues.apache.org/jira/browse/OPENJPA-692?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12621217#action_12621217
]
Frank Schwarz commented on OPENJPA-692:
---------------------------------------
I did some additional testing with Hibernate3. It seems that Hibernate is very
robust on this topic.
The following mappings worked as expected:
1.
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@OneToMany(mappedBy = "person", cascade = CascadeType.ALL)
@JoinTable(name="PERSON_ADDRESS",
[EMAIL PROTECTED](name="PERSON_ID",
referencedColumnName="ID"),
[EMAIL PROTECTED](name="ADDRESS_ID",
referencedColumnName="ID"))
private Set<Address> addresses = new HashSet<Address>();
}
@Entity
@SecondaryTable(name="PERSON_ADDRESS", [EMAIL PROTECTED](name="ADDRESS_ID"))
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@ManyToOne
@JoinColumn(table="PERSON_ADDRESS", referencedColumnName="ID")
private Person person;
}
------%<----------------
2.
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@OneToMany(mappedBy = "person", cascade = CascadeType.ALL)
private Set<Address> addresses = new HashSet<Address>();
}
@Entity
@SecondaryTable(name="PERSON_ADDRESS", [EMAIL PROTECTED](name="ADDRESS_ID"))
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@ManyToOne
@JoinColumn(table="PERSON_ADDRESS")
private Person person;
}
------%<----------------
3.
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@OneToMany(mappedBy = "person", cascade = CascadeType.ALL)
private Set<Address> addresses = new HashSet<Address>();
}
@Entity
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@ManyToOne
@JoinTable(name="PERSON_ADDRESS", [EMAIL PROTECTED](name="ADDRESS_ID"))
private Person person;
}
Not working with Hibernate is leaving out the "mappedBy" attribute of the
Person.addresses field annotation in the first mapping example.
Personally, I would like to see the third example mapping working. It uses
minimal annotations but remains semantically understandable. And it conforms
with the spirit of JSR220 disapproving additional annotations on a "mapped-by"
field.
> Bi-directional One-to-Many mapping with a JoinTable fails for Update or
> Delete operation
> ----------------------------------------------------------------------------------------
>
> Key: OPENJPA-692
> URL: https://issues.apache.org/jira/browse/OPENJPA-692
> Project: OpenJPA
> Issue Type: Bug
> Reporter: Pinaki Poddar
> Assignee: Pinaki Poddar
> Fix For: 1.3.0
>
>
> Originally reported in user group message [1] by Frank Schwarz
> If
> a) Entities A and B that are related in a one-to-many and many-to-one
> bi-directional relation (typical Parent-Child pattern)
> b) mapped using a JoinTable instead of conventional mappedBy
> then
> update/delete operation fails with OptimisticException (which itself is a
> catch-all and sometimes misleading).
> Typical mapping that encounters this error:
> public class Person {
> @Id
> private long ssn;
>
> @OneToMany(cascade=CascadeType.ALL)
> @JoinTable(name="J_PERSON_ADDRESSES",
> joinColumns =
> @JoinColumn(name="PERSON_SSN", referencedColumnName="SSN"),
> inverseJoinColumns = @JoinColumn(name="ADDRESS_PHONE",
> referencedColumnName="PHONE"))
> private Set<Address> addresses = new HashSet<Address>();
> public class Address {
> @Id
> private String phone;
>
> @ManyToOne
> @JoinColumn(table="J_PERSON_ADDRESSES", referencedColumnName="SSN")
> private Person person;
> [1]
> http://n2.nabble.com/bidirectional-one-to-many-relationship-with-join-table-tc678479.html
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.