当前位置: 首页 > 知识库问答 >
问题:

ValidationException异常说明:在relationship属性中使用非实体作为目标实体

梁英喆
2023-03-14

我得到了以下异常,并且在此之前已经执行了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
@Column(name="numberType")
@Enumerated(EnumType.ORDINAL)
private PhoneNumberType numberType;

@Column(name="phoneNumber")
private String phoneNumber;
}
</code>

添加persistance.xml

<code>

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence    http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="RSVPLawServerPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/RSVPLaw</jta-data-source>
<class>com.smartphonedev.rsvplaw.entities.PhoneNumber</class>
<class>com.smartphonedev.rsvplaw.entities.Address</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<shared-cache-mode>NONE</shared-cache-mode>
<validation-mode>CALLBACK</validation-mode>
<properties>
  <property name="eclipselink.target-server" value="SunAS9"/>  
  <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
  <property name="eclipselink.ddl-generation" value="create-tables"/>
  <property name="eclipselink.ddl-generation.output-mode" value="database"/>
  <property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>

<code> 

共有1个答案

吕岳
2023-03-14

我在将一个@ManyTomany关系拆分为两个@OneTomany/@ManyToOne关系时也遇到了同样的情况,我解决了这个问题。以下是一些小贴士,总结了以上所有的答案和我的发现:

  1. 确保类具有批注@entity并且具有正确的表(Name=xxx)
  2. 如果使用JPA,请确保它在persistence.xml中。如果使用Hibernate,请确保它在Hibernate.cfg.xml中。如果两者都使用,则在两个文件中使用。
  3. 确保类与映射/cfg文件位于同一JAR中。
  4. 我发现了一件事:不必删除mappedby=,但必须确保属性名称在整个项目中是唯一的!

就像我的情况一样:如果我删除了@OneTomany端的MappedBy(而@ManyToOne端是@ManyTomany关系的中间类,它有自己的字段,所以我必须将其设为@Entity而不是直接使用中间表),EclipseLink会抱怨一个不存在的名为“EntityA_MiddleEntity”的表。我猜想,当遇到mappedby=xxx时,EclipseLink查找所有具有名为xxx字段的实体,并且当它存在于多个类中,并且其中一个类是@manytomany的中间类时,它将无法将它们关联起来。所以我在中类中更改了属性名,所有工作都很好。

 类似资料:
  • 我使用的是Netbeans IDE 8.0.2和eclipselink 2.5.2。下面是打开连接时出现的异常,问题是这种情况并不是每次都发生。异常“Departmento”中描述的实体完全遵循其他类的模式,即我们的系统已经包含大约500个实体类,只有在新的类中才发生此异常。这个实体是由Netbeans的“实体类从数据库”选项生成的,并添加到持久化XML... 由:javax.Persistenc

  • 我不熟悉Hibernate和JPA,正在尝试连接一个电影、评分员和评分的数据库。我一直收到由org.hibernate引起的错误。注释异常:通过引用映射未知目标实体属性:com.stephenalexander.projects.movierecommender.rating.rating。com.stephenalexander.projects.movierecommender.movie.m

  • 我第一次使用Hibernate,并且很难让它与我的模式一起工作。 我得到了"org.hibernate.注释异常:映射通过引用未知的目标实体属性:学生。教师在Faculty.all学生”。 一些学生共用一个导师。因此,我认为学生和教师的关系是多对多的,但我被告知这是多对多的关系。 Student.java Faculty.java 数据库架构: 在看了留档后,我尝试了几种不同的注释,但我看不出我做

  • 问题内容: 我在被注释的对象中建立一对多关系时遇到问题。 我有以下几点: 然后这个 和这个 我在这里做错了什么 问题答案: 该属性正在引用,而该属性是,因此出现错误消息。因此,请将您的映射更改为: 或者将实体属性更改为(这就是我要做的)。 mapledBy参考指示“在我有一个用于查找配置的集合的东西上查找名为’customer’的bean属性。”

  • 我有两个实体,其中一个我正在使用一个用户输入的PK。 我在启动springboot应用程序时遇到以下异常。 我的实体类如下所示。 我无法弄清楚代码中的问题。

  • 我有两个表审查和bedrijfsgegevens。Review表有一个主键(reviewId)和一个外键(bedrijfId)。BedrijfId是Bedrijfsgegevens表中的主键(作为Id)。我遇到了这个问题,因为我试图在Review表中添加一个bedrijfId,而Bedrijfgegevens表中不存在这个行,因此得到了一个异常。 我尝试使用@manytoone和@joincolu