jpa错误使用非实体[class ch.printsoft.mailhouse.usermgr.entity.Department]作为关系属性中的目标实体

jpa persistence eclipselink

21815 观看

8回复

134 作者的声誉

我尝试将我的DepartmentMandator类保持到hsqhldb,但它给出了这个错误。

Exception Description: [class ch.printsoft.mailhouse.usermgr.entity.Mandator] uses a non-entity [class ch.printsoft.mailhouse.usermgr.entity.Department] as target entity in the relationship attribute [field departments].
at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:126)
at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:115)
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)

这些是我尝试持久保存到我的数据库的类。我真的不知道问题是什么。

@Entity
public class Mandator {
  @Id
  @GeneratedValue
  private Integer id;
  private String mandatorId;
  @OneToMany(mappedBy = "mandator")
  private List<MandatorUser> mandatorUsers;
  @OneToMany(mappedBy = "mandator")
  private List<SLAFamilyGroup> slaFamilyGroups;
  @OneToMany(mappedBy = "mandator")
  private List<Group> groups;
  @OneToMany(mappedBy = "mandator")
  private List<Department> departments;
  @OneToMany(mappedBy = "mandator")
  private List<CostUnit> costUnits;



@Entity
  public class Department {
  @Id
  @GeneratedValue
  private Integer id;
  private String name;
  private String responsiblePerson;
  private String location;

  @ManyToOne(optional = false)
  private Mandator mandator;
  @ManyToMany
  private List<DocumentUser> documentUsers;

我真的尝试了所有的东西,但它没有用。

作者: Miguel Iglesias 的来源 发布者: 2011 年 12 月 2 日

回应 (8)


1

7310 作者的声誉

从Mandator类的@OneToMany注释中删除mappedBy

检查是否所有相关类都映射为@Entity。Department类与DocumentUser有@ManyToMany关系。提供DocumentUser类的列表

作者: WeMakeSoftware 发布者: 02.12.2011 08:49

42

21116 作者的声誉

确保在persistence.xml中列出了这两个类,并且这两个类都在类路径中。

请包含您的persistence.xml。

作者: James 发布者: 05.12.2011 06:18

0

71 作者的声誉

确保两个“类”文件都在同一个jar中。确保您没有两个具有相同名称的.class文件!

作者: Marcin Cinik 发布者: 04.09.2012 08:18

0

1 作者的声誉

确保两个类都具有PK属性和无参数构造函数。我在我的实体类中添加以下代码。

@Entity
public class EntityClass{
   @Id
   @GeneratedValue(strategy=GenerationType.AUTO)
   public int id;
   public EntityClass() {
   } 
   ...
}
作者: peirong.an 发布者: 04.08.2015 06:04

0

2860 作者的声誉

检查你的mappedBy=xxx并确保xxx在整个项目中是独一无二的。

作者: WesternGun 发布者: 30.10.2015 12:05

39

1803 作者的声誉

我花了很多时间调试一个看似无法解释的异常情况,所以我只是把我的故事放在这里。

如果您使用的是稍微旧的实现JPA(如EclipseLink的2.5.X)和你在你的代码库使用现代的Java 8特性(比如lambda表达式) -不要永远使用它们在JPA实体类。

EclipseLink 2.5的类元数据解析器在遇到字节码中的Java 8功能(例如lambda表达式,方法引用等)时崩溃。内部崩溃是一个非常不友好的ArrayIndexOutOfBoundsException,但你甚至没有看到它,因为weaver代码默默地忽略元数据解析器崩溃,并假设该类没有有趣的元数据。这导致它相信所讨论的类不是实体,即使它具有所有正确的注释,最终结果是我们正在讨论的错误消息。

结论:不要在JPA实体类中使用Java 8 lambdas。EVER。

作者: kFYatek 发布者: 11.10.2016 03:27

3

76 作者的声誉

我希望这可以帮助别人。

我有同样的问题。前一天晚上,一切都很好。在NetBeans中,我使用History检查了错误中涉及的所有文件。包含Persistence.xml。没有任何改变。

我也手动检查了。我已尝试在此主题中建议的所有解决方案,甚至迁移到eclipselink 2.6.4。我删除了persistence.xml中涉及的2类,保存了它,然后又添加了。错误仍然存​​在。

然后,我删除了persistence.xml中包含的实体类列表中的所有classess,然后我再次包含它们。

现在它有效。奇妙的。

但实际上历史上没有差别。即使是单个角色。

作者: docHell 发布者: 11.08.2017 03:26

0

47 作者的声誉

是的是的。不要使用JAVA 8 STREAM或LAMBDAS ......我从我的一个功能中取出它并且工作......

作者: JediSal 发布者: 16.08.2019 10:11
32x32