Reputation: 416
How do you create an annotation for the following case:
Table A
id
name
Table B
id
name
Table C
id
name
Table AB
a_id
b_id
Table ABC
id
a_id
b_id
c_id
name
How can you represent table ABC on hibernate using annotations?
Table AB is not an object it is used as a table join between tables A and B.
The annotation for A and B would look something like this:
For A:
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(name="AB",
joinColumns={@JoinColumn(name="a_id", referencedColumnName="id")},
inverseJoinColumns={@JoinColumn(name="b_id", referencedColumnName="id")})
private Set bs;
For B:
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(name="AB",
joinColumns={@JoinColumn(name="b_id", referencedColumnName="id")},
inverseJoinColumns={@JoinColumn(name="a_id", referencedColumnName="id")})
private Set as;
Thanks in Advance.
Upvotes: 0
Views: 589
Reputation: 2756
I would have done something like that :
A:
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.LAZY)
@JoinTable(name = "AB", joinColumns = @JoinColumn(name = "A_ID",
referencedColumnName = "ID"), inverseJoinColumns = @JoinColumn(name = "B_ID",
referencedColumnName = "ID"))
private List<B> bs;
Same for B.
ABC:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "A_ID")
private A a;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "B_ID")
private B b;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "C_ID")
private C c;
Upvotes: 3