Mig*_*ias 17 persistence jpa eclipselink
我尝试将我的Department和Mandator类持久化到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)
Run Code Online (Sandbox Code Playgroud)
这些是我尝试持久保存到我的数据库的类.我真的不知道问题是什么.
@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;
Run Code Online (Sandbox Code Playgroud)
我真的尝试了所有的东西,但它没有用.
kFY*_*tek 43
我只花了很多时间调试此异常的一个看似无法解释的情况下,所以我只是让我的故事在这里.
如果您使用的是稍微旧的实现JPA(如EclipseLink的2.5.X)和你在你的代码库使用现代的Java 8特性(比如lambda表达式) -不要永远使用它们在JPA实体类.
EclipseLink 2.5的类元数据解析器在遇到字节码中的Java 8功能(例如lambda表达式,方法引用等)时崩溃.内部崩溃是一个非常不友好的ArrayIndexOutOfBoundsException,但你甚至没有看到它,因为weaver代码默默地忽略元数据解析器崩溃,并假设该类没有有趣的元数据.这导致它相信所讨论的类不是实体,即使它具有所有正确的注释,最终结果是我们正在讨论的错误消息.
结论:不要在JPA实体类中使用Java 8 lambdas.EVER.
小智 5
我希望这可以帮助某人。
我有同样的问题。前一天晚上,一切正常。在NetBeans中,我已使用“历史记录”检查了错误中涉及的所有文件。包含Persistence.xml。一切都没有改变。
我也手动检查过。我已经尝试了该线程中建议的所有解决方案,甚至迁移到eclipselink 2.6.4。我删除了persistence.xml中涉及的2个类,将其保存并再次添加。错误仍然存在。
然后,我删除了persistence.xml中包含的实体类列表中的所有类,然后再次将它们包括在内。
现在可以了。神奇地。
但是,历史上确实没有区别。甚至是单个字符。
从 Mandator 类的 @OneToMany 注释中删除mappedBy
检查所有相关类是否都映射为@Entity。Department 类与 DocumentUser 具有 @ManyToMany 关系。提供 DocumentUser 类的列表
| 归档时间: |
|
| 查看次数: |
22705 次 |
| 最近记录: |