Эта проблема сводит меня с ума. У меня двунаправленное отношение 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.
Когда вы создаете объект AddDebtorApproval и ассоциируете с ним CreditApproval, вы также устанавливаете AddDebtorApproval в коллекции addedDebtors и объединяете CreditApproval? Что произойдет, если вы обновите CreditApproval и затем получите доступ к коллекции? – Chris