java - JPA OneToMany 关系未填充/填充/仍然为空

标签 java jpa one-to-many

这个问题让我抓狂。我有一个双向 One2Many 关系。当我通过 entitymanager.find() 加载“One”时,相关对象列表为空。

有什么问题,关系没有填充?

这是我的代码...

“一”

Java

@Entity
@Table(name = "CREDIT_APPROVAL")
public class CreditApproval extends FourEyesTask<CreditApproval> {

   @OneToMany(mappedBy = "credit", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
   private Set<AddedDebtorApproval> addedDebtors = null;

“许多”

SQL

CREATE TABLE "LPM"."ADD_DEBTOR_APPROVAL" (
    "ID" DECIMAL(10 , 0) NOT NULL GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999999999 NO CYCLE NO CACHE),
    "CREDIT_ID" DECIMAL(10 , 0) NOT NULL,
    "DEBTOR_ID" VARCHAR(14) NOT NULL,
    "NAME_LONG" VARCHAR(400)
)

Java

@Entity
@Table(name = "ADD_DEBTOR_APPROVAL")
public class AddedDebtorApproval {


    @ManyToOne(optional=false)
    @JoinColumn(name="credit_id", nullable=false, referencedColumnName = "credit_id")
    private CreditApproval credit;

    private String debtor_id;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    private String name_long;

在我的测试数据中,我有一个带有 credit_id = 22 的 AddedDebtorApproval 条目,在 CreditApproval 表中我也有一个带有 credit_id = 22 的条目。

当我加载 creditApproval 实体(“One”)时 entityManager.find(CreditApproval.class, bean.getCredit_id()); 与 many 的关系为空。

一些更多的旁注。

object-relational-mapping.xml 是这样的:已更新

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="1.0"
    xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
    <schema>LPM</schema>

    <entity class="com.ibm.lpm.history.jpa.CreditHistory" access="PROPERTY" />
    <entity class="com.ibm.lpm.history.jpa.DebtorHistory" access="PROPERTY" />
    <entity class="com.ibm.lpm.credit.jpa.CreditBasic" access="PROPERTY">
        <named-query name="findCreditBasicByTransactionNumber">
        <query>
        <![CDATA[SELECT c FROM CreditBasic c WHERE c.transactionNumber = :transactionNumber]]>
        </query>
        </named-query>
    </entity>
        <entity class="com.ibm.lpm.debtor.jpa.DebtorBasic" access="PROPERTY" />
    <entity class="com.ibm.lpm.rating.jpa.DebtorRating" access="PROPERTY" />
    <entity class="com.ibm.lpm.codes.jpa.PropCode" access="PROPERTY" />

</entity-mappings>

persistence.xml 是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="LPMJPA" transaction-type="JTA">
        <jta-data-source>jdbc/lpmDs</jta-data-source>
        <mapping-file>object-relational-mapping.xml</mapping-file>
        <class>com.ibm.lpm.history.jpa.HistoryCommon</class>
        <class>com.ibm.lpm.foureyes.taskqueue.jpa.FourEyesTask</class>
        <class>com.ibm.lpm.foureyes.taskqueue.jpa.DebtorApproval</class>
        <class>com.ibm.lpm.foureyes.taskqueue.jpa.CreditApproval</class>
        <class>com.ibm.lpm.foureyes.taskqueue.jpa.AddedDebtorApproval</class>
    </persistence-unit>
</persistence>

Eclipse 发出一个通知,指出那些 xxxxxApproval 类已经在映射文件中指定(这是真的)。​​

在 Eclipse 的 Project Explorer 中,当我打开 JPA 实体时,CreditApproval 会显示一个带有“?”的小图标。在与 AddedDebtors 的关系之前。在 AddedDebtorsApproval 实体内部的另一个方向的图标显示了 Many2One 关系。 enter image description here

最佳答案

您的映射文件显示它正在将 CreditApproval 的访问类型更改为 PROPERTY,而集合的注释位于该字段上。这可能会导致它忽略注释,而是使用默认关系。修复访问权限以匹配您要使用的注释,以免它们发生冲突。

关于java - JPA OneToMany 关系未填充/填充/仍然为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16605648/

相关文章:

hibernate - Hibernate 3.5 中的 @OrderColumn 注释

java - 什么是PECS(生产者扩展了 super 消费者)?

java - 获取抽象父类(super class)上泛型类型参数的实际类型

java - 使用 Hibernate 更新查询性能

.net - Eager Load 上的 Entity Framework 6 加载列表

django - 我可以让 Django 管理员反射(reflect)模型的层次结构吗?

java - Android 如何正确添加多个按钮监听器

java - 如何合并 springframework.beans.factory.UnsatisfiedDependencyException 堆栈跟踪?

java - Testng 测试带有消息的特定异常

spring - GWT + Spring DATA、JPA 配置