1

この問題は私を夢中にさせます。双方向の One2Many 関係があります。関連オブジェクトのリストに「One」をロードすると、 entitymanager.find()null になります。

リレーションシップが入力されていないというのは、何が問題なのですか?

これが私のコードです...

それ"

ジャワ

@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)
)

ジャワ

@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 エントリが 1 つあり、CreditApproval テーブルにも、credit_id = 22 のエントリが 1 つあります。

creditApproval Entity ("One") をロードするentityManager.find(CreditApproval.class, bean.getCredit_id());と、多数との関係が null になります。

いくつかの補足事項。

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 クラスがマッピング ファイルで既に指定されていることを通知します (これは正しいです)。

Project Explorer の Eclipse で、JPA エンティティを開くと、CreditApproval に「?」が付いた小さなアイコンが表示されます。AddedDebtors との関係の前に。反対方向のアイコンは、AddedDebtorsApproval エンティティ内にあり、Many2One 関係を示しています。 ここに画像の説明を入力

4

2 に答える 2

4

マッピング ファイルは、コレクションの注釈がフィールドにある間に、CreditApproval のアクセス タイプを PROPERTY に変更していることを示しています。これにより、代わりにデフォルトのリレーションを使用して、アノテーションを無視する可能性があります。競合しないように、使用する注釈と一致するようにアクセスを修正します。

于 2013-05-17T11:58:21.707 に答える