2013-05-17 3 views
1

Эта проблема сводит меня с ума. У меня двунаправленное отношение One2Many. Когда я загружаю «Один» за entitymanager.find(), список связанных объектов имеет значение NULL.JPA OneToMany Связь не заполнено/заполнено/еще пусто

Что не так, что отношения не заполнены?

Вот мой код ...

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

В моей Testdata я одна запись AddedDebtorApproval с credit_id = 22 и в таблице CreditApproval У меня есть также один вход с credit_id = 22.

Когда я загрузить creditApproval Entity («Один») entityManager.find(CreditApproval.class, bean.getCredit_id()); отношение к множеству равно 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 показывает небольшую иконку с символом «?» перед отношением к AddDebtors. Значок для другого направления, внутри объекта AddDebtorsApproval, показывает отношение Many2One. enter image description here

+0

Когда вы создаете объект AddDebtorApproval и ассоциируете с ним CreditApproval, вы также устанавливаете AddDebtorApproval в коллекции addedDebtors и объединяете CreditApproval? Что произойдет, если вы обновите CreditApproval и затем получите доступ к коллекции? – Chris

ответ

4

Файл отображения показывает, что меняется тип доступа CreditApproval к ​​собственности, а также аннотацию для сбора находится на поле. Вероятно, это приводит к тому, что он игнорирует аннотацию, вместо этого использует отношение по умолчанию. Исправьте доступ в соответствии с аннотациями, которые вы хотите использовать, чтобы они не конфликтуют.

+0

Швы подобны этому решению соответственно. большая его часть. Я изменил файл сопоставления, как показано выше. Я удалил все сопоставления для этих новых классов, чтобы автоматика jpa оценивала аннотации. Соединение не заполнено. – KFleischer

1

Почему вы используете файл object-relational-mapping.xml? Вы смешиваете конфигурацию путем аннотации конфигурации nd xml. Вы пытались удалить эту строку из файла persistence.xml?

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

Это необходимо, потому что файл сопоставления также определяет имя схемы и является единственным файлом вне уха, который развертывается для настройки сохранения на целевой машине. Но все же я думаю, что, возможно, файлы конфигурации - это правильный трек. Эти файлы переопределяют аннотации, насколько я знаю. Будет ли проверка JPA для объектов, которые аннотируются, но не перечислены в этих конфигурациях? Если это так, я удалю мои новые сущности из xml-файлов и позволяю им открываться автоматически. – KFleischer

Смежные вопросы