Hibernate Doc (Chap 8.3.4)
::Relationship::
person(many) -> address(many)
::DB Schema::
person(personId)
address(addressId)
personaddress(personId, addressId)
::Java Operation::
person.getAddresses();
::Annotation::
@Entity @Table(name = "PERSON") public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "personId") private int id; @ManyToMany @JoinTable(name = "PersonAddress", joinColumns = { @JoinColumn(name="personId", unique = true) }, inverseJoinColumns = { @JoinColumn(name="addressId") } ) private Set<Address> addresses; }
@Entity @Table(name = "ADDRESS") public class Address { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "addressId") private int id; }
::Generated SQL::
- person.getAddresses();
select addresses0_.personId as personId1_, addresses0_.addressId as addressId1_, address1_.addressId as addressId3_0_ from PersonAddress addresses0_ left outer join ADDRESS address1_ on addresses0_.addressId=address1_.addressId where addresses0_.personId=?
[Association Mapping List]
5 comments:
Is this really a many-to-many relationship?
Isn't the constraint "unique = true" in:
@JoinColumn(name="personId", unique = true)
preventing the existence of multiple entries of the same personId in the Table PersonAddress?
I agree, that unique constraint makes this effectively a one-to-many relationship.
Excellent, superb, fantastic
You cant explain more simple than this
First of all thanks for the great post. I, of course, have a small question: If for some reason I would need to get all the people living in a specific address then the @JoinTable annotation on the Address entity would be exactly the same only the joinColumns and inverseJoinColumns properties would be opposite. Am I correct?
In my previous comment I meant of course if I wanted to additionally have the ability to retrieve all people living in an address meaning each entity will contain a Set of the other entity
Post a Comment