2013-05-17 95 views
1

此問題令我發狂。我有一個雙向One2Many關係。當我加載entitymanager.find()上的「One」時,相關對象列表爲空。JPA OneToMany關係未填充/填充/仍爲空

有什麼不對,關係沒有填充?

這裏是我的代碼...

「一」

的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; 

在我TESTDATA我有credit_id = 22,並在CreditApproval表我也credit_id一入一次AddedDebtorApproval進入= 22

當我加載creditApproval實體(「One」)entityManager.find(CreditApproval.class, bean.getCredit_id());與many的關係爲null。

一些附註。

對象 - 關係-mapping.xml IST這樣的:更新

<?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

+0

當您創建AddedDebtorApproval實體並將CreditApproval與其關聯時,是否還在addedDebtors集合中設置了AddedDebtorApproval併合並了CreditApproval?如果刷新CreditApproval然後訪問集合,會發生什麼情況? – Chris

回答

4

映射文件顯示它正在改變CreditApproval的接入類型的特性,同時爲集合的註釋是在球場上。這可能會導致它忽略註釋,而是使用默認關係。修復訪問以匹配要使用的註釋,以免發生衝突。

+0

這樣的接縫是解決方案。它的一大部分。 我改變了如上所示的映射文件。我刪除了這些新類的所有映射,以便jpa自動評估註釋。沒有連接被填充。 – KFleischer

1

爲什麼使用object-relational-mapping.xml文件?您正在通過註釋和XML配置混合配置。你有沒有試圖刪除你的persistence.xml文件的這一行?

<mapping-file>object-relational-mapping.xml</mapping-file> 
+0

這是必要的,因爲映射文件還定義了模式名稱,並且它是爲了配置目標機器上的持久性而部署的耳朵之外的唯一文件。 但我仍然認爲也許配置文件是正確的軌道。 據我所知,這些文件會覆蓋註釋。 JPA會掃描那些註釋過的實體,但不會在這些配置中偵聽嗎?如果是這樣,我會從XML文件中刪除我的新實體,並讓它們被自動發現。 – KFleischer