Alex Rivera | Logout

How to add a separate Primary Key to a Join Table in Hibernate

Asked 2010-09-21T16:24:30.653
10

I have a question about Hibernate ManyToMany mappings. I have two classes A and B and the mapping between them is a ManyToMany mapping resolved by Hibernate:

@Entity
@Table(name="A")
public class A {

    @Id
    @GeneratedValue
    private Long id;

    @ManyToMany
    @JoinTable(name="C", joinColumns=@JoinColumn(name="a_id"), inverseJoinColumns=@JoinColumn(name="b_id"))
    private Set bs;
}

@Entity
@Table(name="B")
public class B {

    @Id
    @GeneratedValue
    private Long id;

    @ManyToMany(mappedBy="bs")
    private Set bs;
}

As you can see, the Join Table I use is C. The foreign keys to A and B are "a_id" and "b_id". My understanding is, that Hibernate creates a composed Primary Key with a_id and b_id for table C.

I don't want to have an entity C in my model. But instead of a composed primary key on table C, I would like to have a generated ID and a unique constraint on the fields a_id and b_id.

Is it possible to tell Hibernate to use a separate primary key? Without adding an entity C?

I would appreciate any help.

Thanks a lot!

Edit
Report

1 Answer

1

I don't think it is possible. And I don't see a problem in defining a C entity.

If you have any additional information ind the join-table, it will not be accessible to you, because your Set contains the target entity - A or B.

Also, your Sets would better make use of generics - i.e. Set<A> and Set<B>.

Btw, Hibernate might not be alarmed by the fact that the table creates another entity - using your current mapping might work (disregarding completely the id column). When you said "Hibernate creates", I assumed you are generating your schema from your entity model. Now it seems it's the opposite, so give it a try.

answered 2010-09-21T16:34:08.310

Your Answer