【发布时间】:2015-01-14 07:11:26
【问题描述】:
我遇到了以下异常,之前已经完成了 1000 次,但现在我遇到了错误:
ValidationException 异常描述:[class com.smartphonedev.rsvplaw.entities.Staff] 使用非实体 [class com.smartphonedev.rsvplaw.entities.Address] 作为关系属性 [字段地址] 中的目标实体..
这里是有问题的实体。有人可以帮我找出我的人际关系出了什么问题吗?
<code>
@Entity
@Table(name="address")
public class Address implements Serializable,
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name="addressType")
@Enumerated(EnumType.ORDINAL)
private AddressType addressType;
@Column(name="streetLineOne")
private String streetLineOne;
@Column(name="streetLineTwo")
private String streetLineTwo;
@Column(name="city")
private String city;
@Column(name="adState")
private String state;
@Column(name="postCode")
private String postCode;
@OneToMany(fetch=FetchType.LAZY, targetEntity=PhoneNumber.class, cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH},orphanRemoval=true)
@JoinColumn(name="phoneNumbers")
private Collection<PhoneNumber> phoneNumbers;
…..
}
@Entity
@Table(name="staff")
public class Staff implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
//private Profile profile;
@OneToOne(fetch=FetchType.LAZY,cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
@JoinColumn(name="permission")
private Permission permission;
@OneToOne(fetch=FetchType.LAZY,cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
@JoinColumn(name="login")
private Login login;
@Column(name="firstName")
private String firstName;
@Column(name="surnameName")
private String surnameName;
@Column(name="emailAddress")
private String emailAddress;
@OneToMany(fetch=FetchType.LAZY, targetEntity=PhoneNumber.class, cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH},orphanRemoval=true)
@JoinColumn(name="phoneNumbers")
private Collection<PhoneNumber> phoneNumbers;
@OneToMany(fetch=FetchType.LAZY, targetEntity=Address.class, cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH},orphanRemoval=true)
@JoinColumn(name="addresses")
private Collection<Address> addresses;
}
</code
添加 phoneNumber 类
@Entity
@Table(name="phone")
public class PhoneNumber implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name="numberType")
@Enumerated(EnumType.ORDINAL)
private PhoneNumberType numberType;
@Column(name="phoneNumber")
private String phoneNumber;
}
</code>
添加persistance.xml
持久性> org.eclipse.persistence.jpa.PersistenceProvider jdbc/RSVPLaw com.smartphonedev.rsvplaw.entities.PhoneNumber com.smartphonedev.rsvplaw.entities.Address false 无 回调 属性>
【问题讨论】:
-
@OneToMany应该是mappedBy,而@ManyToOne后面应该是@JoinColumn -
@guido OneToMany 只有在它是双向的情况下才具有“mappedBy”......那么当他没有显示 PhoneNumber 类时,你怎么知道在这种情况下呢?
-
请注意它们都是单向的
-
您的班级
Address是否列在persistence.xml中?看起来它不是“已知”的实体。
标签: java jpa ejb glassfish-4 java-ee-7