Hibernate Doc (Chap 8.5.1)
::Relationship::
person(one) <-> address(one)
::DB Schema::
person(personId)
personAddress(personId, addressId)
address(addressId)
::Java Operation::
person.getAddress();
address.getPerson();
::Annotation::
@Entity @Table(name = "PERSON") public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "personId") private int id; @OneToMany @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; @ManyToOne(optional=true) @JoinTable(name = "PersonAddress", joinColumns = { @JoinColumn(name="addressId") }, inverseJoinColumns = { @JoinColumn(name="personId") } ) private Person person; }
::Generated SQL::
- person.getAddresses();
select addresses0_.personId as personId2_, addresses0_.addressId as addressId2_, address1_.addressId as addressId3_0_, address1_1_.personId as personId4_0_, person2_.personId as personId2_1_ from PersonAddress addresses0_ left outer join ADDRESS address1_ on addresses0_.addressId=address1_.addressId left outer join PersonAddress address1_1_ on address1_.addressId=address1_1_.addressId left outer join PERSON person2_ on address1_1_.personId=person2_.personId where addresses0_.personId=?
- address.getPerson();
select address0_.addressId as addressId3_1_, address0_1_.personId as personId4_1_, person1_.personId as personId2_0_ from ADDRESS address0_ left outer join PersonAddress address0_1_ on address0_.addressId=address0_1_.addressId left outer join PERSON person1_ on address0_1_.personId=person1_.personId where address0_.addressId=?
[Association Mapping List]
3 comments:
This is one of the best reference site about jpa and hibernate!! Keep up the good work!
Just a note to say that, to my knowledge, @FilterJoinTable doesn't work on a many-to-one association.
I had to use a many-to-many instead on the Address side to apply my FilterJoinTable.
thanks for the post helped a lot in the right time ;) hurray
Post a Comment