【问题标题】:@OneToOne or @ManyToOne references an unknown entity@OneToOne 或 @ManyToOne 引用未知实体
【发布时间】:2015-03-27 16:47:51
【问题描述】:

我正在尝试在不同 jar 中的 2 个实体之间建立关系。 这是主项目中的第一个实体:

    @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" /> 

他们都没有帮助我解决这个问题。您能否提出一些解决此问题的建议?

【问题讨论】:

    标签: java entity-framework hibernate jpa entity-relationship


    【解决方案1】:

    确保您要关联的 jar 在其 META-INF 中包含 persisence.xml,其中包含 jar 中的所有实体。

    【讨论】:

    • 谢谢@hragheb!我的主项目中只有一个 persistence.xml。我声明了该 persistence.xml 中的所有实体,无论是主项目还是作为库 jar 添加的第二个项目。我的第二个项目中没有 persistence.xml。我真的必须在每个项目中都有实体吗?获取这些实体并读取数据没有问题。但是当我尝试在 2 个不同的项目中建立实体之间的一些关系时,我得到了未知实体错误
    猜你喜欢
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多