Проблема составного ключа Entity Bean 3.0 - PullRequest
1 голос
/ 21 февраля 2011

1: у меня есть таблица, показанная ниже:

Имя Нет? Тип


ATX_ID NOT NULL NUMBER (16) ATX_GLM_CD NOT NULL NUMBER (5) ATX_CRDR_FLG NOT NULL VARCHAR2 (1) ATX_AMT НЕ НУЛЬ НОМЕР (15,2) ATX_STTS NOT NULL VARCHAR2 (1) ATX_TCM_ID NOT NULL NUMBER (16) ATX_TXN_DT NOT NULL DATE ATX_CRTE_BY NOT NULL VARCHAR2 (30) ATX_CRTE_DT NOT NULL DATE

Столбцы ATX_ID, ATX_GLM_CD и ATX_CRDR_FLG образуют составной первичный ключ.

2: Я создал класс бина сущности для приведенной выше таблицы следующим образом:

@ Entity открытый класс AcctngTxns реализует Serializable {

private BigDecimal atxAmt;
private String atxStts;
private BigDecimal atxTcmId;
private Date atxTxnDt;
private String atxCrteBy;
private Date atxCrteDt;

@ EmbeddedId частный AcctngTxnsPK acctngTxnsPK;

public AcctngTxns() {
    //super();
}

/*getters and setters*/

}

@ Встраиваемые открытый класс AcctngTxnsPK реализует Serializable {

private long atxId;
private long atxGlmCd;
private String atxCrdrFlg;

private static final long serialVersionUID = 1L;

public AcctngTxnsPK() {
    //super();
}

/*necessary overrides*/

}

3: /orm.xml/

http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" версия = "1.0"?>

4: /persistence.xml/

http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> Источник данных com.nseit.ncfm2.data.ejb.entity.AcctngTxns

5: при доступе к бину сущности через сессионный бин я получаю следующее исключение:

<[weblogic.servlet.internal.WebAppServletContext@1a1bc8f - appName: '_auto_generated_ear_', name: 'AWebApp', context-path: '/ AWebApp', spec-version: '2.5'] Сбой сервлета в исключении javax.ejb.EJBException: EJB Exception:; Вложенное исключение: org.apache.openjpa.persistence.ArgumentException: поля "com.nseit.ncfm2.data.ejb.entity.AcctngTxns.acctngTxnsPK" не являются постоянными типами по умолчанию и не имеют аннотаций, указывающих их стратегию персистентности. Если вы не хотите, чтобы эти поля были сохранены, пометьте их @Transient. в weblogic.ejb.container.internal.RemoteBusinessIntfProxy.unwrapRemoteException (RemoteBusinessIntfProxy.java:105) на weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke (RemoteBusinessIntfProxy.java:87) на $ Proxy127.gottaAccessEntity3 (неизвестный источник) в jsp_servlet .__ результат. <em>jspService ( _result.java: 115) на weblogic.servlet.jsp.JspBase.service (JspBase.java:34) Уса. смотрите файл журнала для полной трассировки стека org.apache.openjpa.persistence.ArgumentException: поля "com.nseit.ncfm2.data.ejb.entity.AcctngTxns.acctngTxnsPK" не являются постоянными типами по умолчанию и не имеют аннотаций, указывающих их стратегию персистентности. Если вы не хотите, чтобы эти поля были сохранены, пометьте их @Transient. в org.apache.openjpa.persistence.PersistenceMetaDataFactory.validateStrategies (PersistenceMetaDataFactory.java:399) в org.apache.openjpa.persistence.PersistenceMetaDataFactory.load (PersistenceMetaDataFactory.java:205) в org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal (MetaDataRepository.java:474) в org.apache.openjpa.meta.MetaDataRepository.getMetaData (MetaDataRepository.java:294) в org.apache.openjpa.kernel.BrokerImpl.newObjectId (BrokerImpl.java:1114) Уса. см. файл журнала для полной трассировки стека

7: Конечно, я не хочу, чтобы поля первичного ключа обновлялись.

8: я попытался выяснить реализацию следующих пунктов, упомянутых в документации JPA:

Составной первичный ключ должен быть представлен и сопоставлен с несколькими полями или свойствами класса сущности или должен быть представлен и сопоставлен как встраиваемый класс.

Если класс сопоставлен с несколькими полями или свойствами класса сущности, имена и типы полей или свойств первичного ключа в классе первичного ключа должны совпадать с именами класса сущности.

8: Пожалуйста, помогите мне решить проблему.

Спасибо!

1 Ответ

1 голос
/ 24 февраля 2011

Я нашел решение методом проб и ошибок.Похоже, что в JPA 1.0 необходимо упомянуть встроенный идентификатор в файле orm.xml следующим образом:

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...