- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 OpenXava 中捆绑的 hibernate-tools.jar 从我的域类生成数据库架构。
不幸的是,两个具有 OneToMany 关联的类给我带来了麻烦。
这是第一个:
@Entity
public class Deceased extends ObjectWithId {
//stuff
@OneToMany(mappedBy = "deceased", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@Access(AccessType.PROPERTY)
public Set<DeceasedTransferDossier> getDeceasedTransferDossier() {
return deceasedTransferDossier;
}
public void setDeceasedTransferDossier(
Set<DeceasedTransferDossier> transferDossiers) {
this.deceasedTransferDossier = transferDossiers;
}
//other stuff
}
这是另一个:
@Entity
public class DeceasedTransferDossier extends DeceasedDossier {
//stuff
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "deceased_fk")
@Override
public Deceased getDeceased() {
return deceased;
}
@Override
public void setDeceased(Deceased deceased) {
this.deceased = deceased;
}
//other stuff
}
这是引发的异常:
[hibernatetool] An exception occurred while running exporter #2:hbm2ddl (Generates database schema)
[hibernatetool] To get the full stack trace run ant with -verbose
[hibernatetool] org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.infoone.siglo.entity.DeceasedTransferDossier.deceased in com.infoone.siglo.entity.Deceased.deceasedTransferDossier
[ant] Exiting C:\Users\AlejandroEduardo\Documents\workspace-sts-3.1.0.RELEASE-2\OpenXava\build.xml.
BUILD FAILED
C:\Users\AlejandroEduardo\Documents\workspace-sts-3.1.0.RELEASE-2\SigloXava\build.xml:46: The following error occurred while executing this line:
C:\Users\AlejandroEduardo\Documents\workspace-sts-3.1.0.RELEASE-2\OpenXava\build.xml:1016: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.infoone.siglo.entity.DeceasedTransferDossier.deceased in com.infoone.siglo.entity.Deceased.deceasedTransferDossier
at org.apache.tools.ant.ProjectHelper.addLocationToBuildException(ProjectHelper.java:551)
at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:444)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:392)
at org.apache.tools.ant.Target.performTasks(Target.java:413)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:424)
at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:138)
Caused by: C:\Users\AlejandroEduardo\Documents\workspace-sts-3.1.0.RELEASE-2\OpenXava\build.xml:1016: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.infoone.siglo.entity.DeceasedTransferDossier.deceased in com.infoone.siglo.entity.Deceased.deceasedTransferDossier
at org.hibernate.tool.ant.HibernateToolTask.reportException(HibernateToolTask.java:226)
at org.hibernate.tool.ant.HibernateToolTask.execute(HibernateToolTask.java:189)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:392)
at org.apache.tools.ant.Target.performTasks(Target.java:413)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
at org.eclipse.ant.internal.launching.remote.EclipseSingleCheckExecutor.executeTargets(EclipseSingleCheckExecutor.java:30)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:442)
... 16 more
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.infoone.siglo.entity.DeceasedTransferDossier.deceased in com.infoone.siglo.entity.Deceased.deceasedTransferDossier
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:666)
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:626)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:66)
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1586)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1359)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1300)
at org.hibernate.tool.ant.ConfigurationTask.getConfiguration(ConfigurationTask.java:56)
at org.hibernate.tool.ant.HibernateToolTask.getConfiguration(HibernateToolTask.java:302)
at org.hibernate.tool.ant.Hbm2DDLExporterTask.createExporter(Hbm2DDLExporterTask.java:51)
at org.hibernate.tool.ant.ExporterTask.execute(ExporterTask.java:39)
at org.hibernate.tool.ant.HibernateToolTask.execute(HibernateToolTask.java:186)
... 29 more
让我指出一些可能的伤害来源:
所有实体都有一个共同的父类,名为可识别:
@MappedSuperclass
public class Identifiable {
private String id;
public void setId(String id) {
this.id = id;
}
@Id @GeneratedValue(generator="system-uuid") @Hidden
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(length=32)
public String getId() {
return id;
}
}
让我指出,这样的结构已经在 Spring-data + Hibernate 容器中工作,其中数据库模式已成功创建(Spring-data 3.1.2 + Hibernate 4.1.6)OpenXava 捆绑了旧版本的 Hibernate 和 Hibernate Tools,因此我尝试手动调整它,将其更新为:
我希望这样的更新可以解决我的问题,但不幸的是,org.hibernate.AnnotationException 保持不变。
最佳答案
问题在于您正在扩展DeceasedDossier并从本质上改变(或定义?)后代类(DeceasedTransferDossier)和Deceased之间的关系。
我们不知道祖先(DeceasedDossier)长什么样,但可能有一些东西。要么您没有注释此类,所以当持久性提供者试图“弄清楚”死者对DeceasedTransferDossier 意味着什么时,您就会遇到问题。或者,您注释不正确。我想可能还存在另一个问题,但我们再次需要查看已故文件。
因此,解决方案无需真正了解DeceasedDossier 发生了什么:
如果您没有注释 DecreasedDossier 类,则只需告诉提供商您在 DeceasedTransferDossier 上对死者使用 PROPERTY 访问权限即可。
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "deceased_fk")
@Override
@Access(AccessType.PROPERTY)
public Deceased getDeceased() {
return deceased;
}
如果您正在注释DeceasedDossier,那么我们需要看到问题才能解决。但是,我敢打赌,只要在 DeceasedTransferDossier 的已故 getter 上添加 @Access 注释,您就会暴露这种情况下的根本问题(当提供者试图“弄清楚”DeceasedDossier 发生了什么时)。
最后,我不得不说,这似乎是一种奇怪的关系。我想 DeceasedDossier 具有已故状态(实例变量),因为您提到了“非抽象 getter”,但您也在后代中定义了这样的关系。由于您的问题与此无关,因此我不会“批评”,但也许会回顾一下您为何如此拆分它。
关于java - OneToMany - org.hibernate.AnnotationException : mappedBy reference an unknown target entity property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17125713/
我有以下简单的设计: (来源:kawoolutions.com) 这基本上是 JPA 不支持的非不相交继承的一种解决方法。人员可以单独存在,但可以选择有单个玩家实体、单个教练实体或两个实体来完成逻辑。
You create a bidirectional one-to-one relationship using fields on both classes, with an annotation
我有一个查询,我碰巧有一个名为“SGOrdCompra”的表,将他与“SGPersona”链接了两次,表如下: Sgordcompra.java @Entity @Table(name = "`SGO
我想我理解属性 mappedBy 如果放入 @OneToMany 字段中意味着什么(即表示字段类型的表具有该表的外键)声明了 @OneToMany(mappedBy="...") ,但我不完全理解它的
我想将现有的 JPA 实体拆分为 POJO 父类(super class)和实体子类。我想将 POJO 父类(super class)放入一个库项目中,该项目可以被其他不使用 JPA 的项目引用。 我
例如,当我们在@OneToMany 中使用mappedBy 注解时,我们是否提到了类名或表名? 一个例子: @Entity @Table(name = "customer_tab") public c
我在带注释的对象中设置一对多关系时遇到问题。 我有以下几点: @MappedSuperclass public abstract class MappedModel { @Id @Ge
我创建了三个类 - User、UserSubscription 和 Subscription。我希望 UserSubscription 表中的用户应由 User 表中现有的用户引用。那么,如何使用ma
我有一个带有 Hibernate 注释的 Java 类,它引用另一个 POJO: @Entity @Table(name = "Patient_Visit_Transaction") public c
我仍然不确定哪种是处理 em.remove(entity) 的最佳实践,该实体位于 JPA 中使用 mappedBy 映射的多个集合中。 考虑像 Property 这样的实体引用三个其他实体:Desc
我正在开发 java 应用程序并使用 JPA 与数据库交互,我有两个重要的问题: 我想在两个类之间建立双向链接,因为我需要访问双方的数据。让我们以 A * -1 B 的两个类 A 和 B 为例(如 U
Foo 有: @ManyToMany(mappedBy = "foos") private Set bars 而酒吧有: @ManyToMany private Set foos 除了table是叫f
这个问题已经有答案了: What is cascading in Hibernate? [duplicate] (2 个回答) 已关闭 4 年前。 我正在学习 Hibernate 并遇到一个问题:ma
我有三个类,Site、GoupIP 和 IP 一个站点有一个或多个 GroupIP。一个 GroupIP 有一个或多个 IP。 代码如下: 网站 @Entity @Table(name = "site
当我想使用 persist 方法将新的 UserDetails 对象添加到我的数据库时,我的 JPA 数据库出现问题。然后我得到异常:“关键 hibernate 的重复条目 2”此异常与产品类相关。我
我在 Parent 中提供了一个简单的 oneToMany 关系,并在 Chile 实体类中提供了相应的 ManyToOne: 家长: @Entity @Table(name = "FormExtra
当我尝试获得一对多和多对一关系时,车辆表上的连接列出现问题。为什么 hibernate 正在搜索列 USER_ID 而不是将其连接到表中?我知道加入的目的,但是当我尝试将它与映射的 By 属性一起使用
错误:hibernate.AnnotationException: mappedBy 引用未知的目标实体属性 我知道为什么会出现错误,但我盯着它看的时间越长,就越找不到它:)。我只需要另一个人的观点。
首先,我的类(class): 用户 package com.patpuc.model; import java.util.List; import javax.persistence.Column;
下面两个声明到底有什么区别 B是拥有方 @Entity class A { @Id int id; @OneToOne B b; } @Entity class B { @Id
我是一名优秀的程序员,十分优秀!