1

我在MySql Workbench上有一個大的數據庫,我試圖映射Eclipse Mars上的實體之間的關係,這要歸功於Hibernate和JPA模塊。事實是,我收到錯誤: 「在屬性'personAddresses'中,」映射「屬性'peopleAdd'具有該關係的無效映射類型。」 這是涉及的實體。在Hibernate JPA的ManyToMany關係中的錯誤

1

我一直說,做一個正向工程,休眠創造了我一個AddressId類,其中地址的複合主鍵映射。我懷疑問題可能是這個,但我不確定,你能幫我嗎? 下我發佈的代碼,以便更清楚地瞭解類是如何實現的。

@Entity 
@IdClass(AddressId.class) 
@Table(schema = "YouDroop", name = "Address") 
public class Address implements Serializable 
{ 
... 

private Collection<Person> peopleAdd = new HashSet<Person>(); 

@Id 
@Column(name = "Address", length = 45, unique = true, nullable = false) 
private String address; 
@Id 
@Column(name = "Number", unique = true, nullable = false) 
private int number; 

... 

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
@JoinTable(
      name = "PersonHasAddress", 
      joinColumns = { 
          @JoinColumn(name = "Address_Address", referencedColumnName = "Address", nullable = false), 
          @JoinColumn(name = "Address_Number", referencedColumnName = "Number", nullable = false) 
          }, 
      inverseJoinColumns = {@JoinColumn(name = "Person_Email", referencedColumnName = "Email", nullable = false)} 
      ) 
public Collection<Person> getPeopleAddressed(){ 
    return this.peopleAdd; 
} 

public void setPeopleAddressed(Collection<Person> people){ 
    this.peopleAdd = people; 
} 
} 

public class AddressId implements Serializable 
{ 

private String address; 
private int number; 

public AddressId(){} 

public AddressId(String address, int number) { 
    super(); 
    this.address = address; 
    this.number = number; 
} 

... 
} 

@Entity 
@Table(name = "Person", schema = "YouDroop", uniqueConstraints = 
{ @UniqueConstraint(columnNames = "NickName"), 
@UniqueConstraint(columnNames = "Password") }) 
public class Person implements Serializable 
{ 
... 

private Collection<Address> addresses = new HashSet<Address>(); 

... 

@ManyToMany(fetch = FetchType.LAZY, mappedBy = "peopleAdd") 
public Collection<Address> getPersonAddresses(){ 
    return this.addresses; 
} 

public void setPersonAddresses(Collection<Address> addresses){ 
    this.addresses = addresses; 
} 
} 

回答

0

由於您將@ManyToMany註釋放置在getter方法(或屬性)上,而不是放在字段上。 mappedBy屬性應該引用屬性,而不是字段。

@ManyToMany 
public Collection<Person> getPeopleAddressed() { 
... 
} 

所以,你的mappedBy屬性應該是

@ManyToMany(mappedBy="peopleAddressed") 
public Collection<Address> getPersonAddresses() { 
... 
} 
+0

所以,如果我要地圖領域,我已經把註釋在球場上,而如果我要地圖的方法,我有沒有把註釋放在方法上(就像我所做的那樣)?這是對的嗎? – MissArmstrong

+0

是的,這是正確的。 – Ish

+0

非常感謝你! – MissArmstrong

相關問題