ValidationException 异常描述:在关系属性中使用非实体作为目标实体
Posted
技术标签:
【中文标题】ValidationException 异常描述:在关系属性中使用非实体作为目标实体【英文标题】:ValidationException Exception Description: uses a non-entity as target entity in the relationship attribute 【发布时间】: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 类时,你怎么知道在这种情况下呢?
***.com/questions/11938253/jpa-joincolumn-vs-mappedby
请注意它们都是单向的
您的班级Address
是否列在persistence.xml
中?看起来它不是“已知”的实体。
【参考方案1】:
我在将@ManyToMany
关系分成两个@OneToMany/@ManyToOne
关系时遇到了同样的情况,我解决了它。以下是从以上所有答案和我的发现得出的一些提示:
-
确保该类带有注释
@Entity
,并且具有正确的Table(name=xxx)
。
如果使用 JPA,请确保它位于 persistence.xml
中。如果使用 Hibernate,请确保它位于 hibernate.cfg.xml
中。如果同时使用,则在两个文件中。
确保类与映射/cfg 文件位于同一 JAR 中。
我发现一件事:您不必删除mappedBy=
,但您必须确保该属性名称在您的整个项目中是唯一的!
就像我的情况一样:如果我在我的 @OneToMany
边中删除 mappedBy
(而 @ManyToOne
边是 @ManyToMany
关系的中间类,它有自己的字段,所以我必须让它 @ 987654332@ 而不是直接使用中间表),EclipseLink 抱怨名为“EntityA_MiddleEntity”的表不存在。我猜,当遇到mappedBy=xxx
时,EclipseLink 会查找字段名为xxx
的所有实体,当它存在于多个类中,并且其中一个类是@ManyToMany
的中间类时,它无法关联它们.于是我改了中间类的属性名,一切正常。
【讨论】:
以上是关于ValidationException 异常描述:在关系属性中使用非实体作为目标实体的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 抛出一个自定义的 ValidationException
Laravel 5.8 Illuminate\Validation\ValidationException:给定的数据无效
DynamoDB 简单 UpdateItem 抛出“提供的关键元素与架构不匹配”ValidationException
如何避免 Hibernate ValidationException 上的自动实体更新
返回带有错误的响应,而不是在验证管道 mediatr 3 中抛出异常
javax.validation.ValidationException: Unable to create a Configuration, because no Bean Validation p