Entity bean 3.0复合键问题

时间:2011-02-21 11:47:07

标签: jpa

1:我有一张如下表所示的表格:

名称空?型


ATX_ID非空数(16)  ATX_GLM_CD非空数(5)  ATX_CRDR_FLG NOT NULL VARCHAR2(1)  ATX_AMT非空数(15,2)  ATX_STTS NOT NULL VARCHAR2(1)  ATX_TCM_ID非空数(16)  ATX_TXN_DT非空日期  ATX_CRTE_BY NOT NULL VARCHAR2(30)  ATX_CRTE_DT NOT NULL DATE

列ATX_ID,ATX_GLM_CD和ATX_CRDR_FLG形成复合主键。

2:我为上表创建了一个实体bean类,如下所示:

@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*/

}

@Embeddable 公共类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:通过会话bean访问实体bean时,我遇到以下异常:

< [weblogic.servlet.internal.WebAppServletContext@1a1bc8f - appName:'_ auto_generated_ear_',name:'AWebApp',context-path:'/ AWebApp',spec-version:'2.5'] Servlet因异常而失败 javax.ejb.EJBException:EJB异常:;嵌套异常是:      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)     at $ Proxy127.gottaAccessEntity3(Unknown Source)     在jsp_servlet .__ result。 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 个答案:

答案 0 :(得分:1)

我通过反复试验方法找到了解决方案。看来,对于JPA 1.0,有必要在orm.xml文件中提及嵌入式ID,如下所示:

                                                        

感谢。