我正在尝试在不同 jar 中的两个实体之间建立关系。 这是主项目中的第一个实体:
@Entity(name = "StdyDtlLabelBean")
@Table(name = "STDY_DTL_LABEL")
public class StdyDtlLabelBean implements Serializable {
@EmbeddedId
private StdyDtlLabelBeanPk id;
@ManyToOne(targetEntity = StdyDtlSubject.class)
@JoinColumns({
@JoinColumn(name="STUDY_ID", insertable = false, updatable = false, referencedColumnName="STUDY_ID"),
@JoinColumn(name="SUBJECT_ID", insertable = false, updatable = false, referencedColumnName="SUBJECT_ID")
})
private StdyDtlSubject subject;
//getters and setters
}
这是一个实体,作为 jar 文件存在于库项目中:
@Entity
@Table(name = "STDY_DTL_SUBJECT")
public class StdyDtlSubject implements Serializable {
private static final long serialVersionUID = 2479124604L;
public StdyDtlSubject() {
}
@EmbeddedId
private StdyDtlSubjectPK key;
//getters and setters
}
@Embeddable
public class StdyDtlSubjectPK implements Serializable {
private static final long serialVersionUID = 6691432687933341920L;
@Column(name = "STUDY_ID")
private Integer studyId;
@Column(name = "SUBJECT_ID")
private String subjectId;
public StdyDtlSubjectPK() {
}
这是持久性单元:
<persistence-unit name="stdyPersistence" transaction-type="RESOURCE_LOCAL">
<jta-data-source>java:comp/env/jdbc/OraclePooledDS</jta-data-source>
<class>com.ctasc.ctpm.jpa.StdyDtlSubject</class>
<class>stdy.brms.beans.StdyDtlLabelBean</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
当我创建实体管理器工厂时,出现以下错误:
@OneToOne or @ManyToOne on stdy.brms.beans.StdyDtlLabelBean.subject references an unknown entity: com.ctasc.ctpm.jpa.StdyDtlSubject
但是,如果我从 StdyDtlLabelBean 实体中删除关系注释并在 StdyDtlSubject 实体上创建命名查询。这些命名查询工作正常。另外,如果我将 StdyDtlSubject 类复制到我的主项目中,它就可以正常工作。仅当我在它们之间建立关系时,我才会收到此错误。
我尝试添加
<jar-file>ctpm.jar</jar-file>
<jar-file>lib/ctpm.jar</jar-file>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<property name="hibernate.archive.autodetection" value="class, hbm" />
<property name="packagesToScan" value="com.ctasc.ctpm.jpa" />
他们都没有帮助我解决这个问题。您能提出一些建议来解决这个问题吗?
最佳答案
确保您想要关联的 jar 的 META-INF 中有一个 persistence.xml,其中列出了 jar 中的所有实体。
关于java - @OneToOne 或 @ManyToOne 引用未知实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28198130/