首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate-JPA上ManyToMany关系中的错误

Hibernate-JPA上ManyToMany关系中的错误
EN

Stack Overflow用户
提问于 2015-10-15 14:38:42
回答 1查看 3.2K关注 0票数 1

我在Eclipse上有一个大型DB,并且我试图映射Eclipse上的实体之间的关系,这要归功于Hibernate和JPA模块。事实是,我收到了错误:“在属性‘人员地址’中,”由属性“映射”属性'peopleAdd‘对此关系具有无效的映射类型。这就是所涉及的实体。

1

我不得不说,做一个前向工程,Hibernate为我创建一个AddressId类,其中映射复合主键的地址。我怀疑问题可能是这个,但我不确定,你能帮帮我吗?在下面,我发布了代码,以便更清楚地理解类是如何实现的。

代码语言:javascript
复制
@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;
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-15 14:51:08

因为您将@ManyToMany注释放在getter方法(或属性)上,而不是在字段上。mappedBy属性应该引用属性而不是字段。

代码语言:javascript
复制
@ManyToMany
public Collection<Person> getPeopleAddressed() {
...
}

所以您的mappedBy属性应该是

代码语言:javascript
复制
@ManyToMany(mappedBy="peopleAddressed")
public Collection<Address> getPersonAddresses() {
...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33151449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档