Hibernate: Join table to a join table annotation

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

Answers (1)

Julien
Julien

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

Related Questions