0

I have many to many relationship between Person and Address tables.

Person:

@Entity
@Table(name = "PERSON_MTM", schema = "Examples")
public class Person 
{
@Id
@Column(name = "PERSON_ID")
private String personId;

@Column(name = "PERSON_NAME")
private String personName;

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "PERSON_ADDRESS", schema = "KunderaExamples",joinColumns = { @JoinColumn(name = "PERSON_ID") }, inverseJoinColumns = {  @JoinColumn(name = "ADDRESS_ID") })
private Set<AddressMTM> addresses;

//setters and getters

}

Address:

@Entity
@Table(name = "ADDRESS_MTM", schema = "Examples")
public class Address
{
@Id
@Column(name = "ADDRESS_ID")
private String addressId;

@Column(name = "STREET")
private String street;

// setters and getters

}

I have a joinTable named PERSON_ADDRESS.

  • Can I add non-Id fields to join-table?
  • Are there any JPA constraints in it?

Note: My question is not in terms of Hibernate. I am asking on behalf of JPA 2.1

Dev
  • 13,492
  • 19
  • 81
  • 174
  • What do you mean by JPA constraints in it? – swinkler May 05 '15 at 09:19
  • @swinkler JPA constraints mean if there is any documentation that suggests or forces to use only Id fields. – Dev May 05 '15 at 09:31
  • I added the API link to JoinTable/joinColumns where you can see that there are no constraints from JPA. – swinkler May 05 '15 at 09:33
  • The columns of a join table will be the id columns of both sides. That's all there is. If you want "other" columns then you create an intermediate entity (as shown in many other posts on the subject on Stackoverflow) – Neil Stockton May 05 '15 at 10:56

1 Answers1

0

You can use multiple JoinColumms, e.g. including PERSON_NAME (if this makes sense for your logic)

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(
    name = "PERSON_ADDRESS", 
    schema = "KunderaExamples",
    joinColumns = { 
      @JoinColumn(name="PERSON_NAME"),
      @JoinColumn(name = "PERSON_ID") }, 
    inverseJoinColumns = {  
      @JoinColumn(name = "ADDRESS_ID") })
private Set<AddressMTM> addresses;
swinkler
  • 1,703
  • 10
  • 20