0

我在hibernate中映射列表時遇到困難。我想知道你對我的課程,地圖和數據庫方案的想法。如果一切正常,我將不勝感激對拋出異常的一些幫助。提前致謝 !hibernate映射列表<CustomClass> - ClassCastException

我有以下類別:

public class AuditEntry { 

    private long id; 
    private String typeLigne; 
    private String famille; 
    private String user; 
    private String libelle ; 
    private String processName; 
    private String caseId; 
    private Date dateCreation = null; 
    private List<AuditEntryStringMap> libelles; 

    /* Getters and setters generated automatically... */ 
} 

public class AuditEntryStringMap { 

    private long id ; 
    private String key ; 
    private String value ; 

    public AuditEntryStringMap(String key, String value) { 
     this.key = key ; 
     this.value = value ; 
    } 
     /* Getters and setters generated automatically... */ 
} 

我HBM文件如下:

<class name="AuditEntryStringMap" table="AUDIT_I18N"> 

     <cache usage="read-write" include="all" /> 
     <id name="id" type="long"> 
      <column name="AUDIT_I18N_ID"></column> 
      <generator class="sequence" > 
      <param name="sequence">AUDIT_I18N_SEQ</param> 
      </generator> 
     </id> 

     <property name="key" column="KEY_" /> 
     <property name="value" column="VALUE_"/> 

</class> 
<class name="AuditEntry" table="AUDIT"> 

     <cache usage="read-write" include="all" /> 
     <id name="id" type="long"> 
      <column name="AUDIT_ID"></column> 
      <generator class="sequence" > 
      <param name="sequence">AUDIT_SEQ</param> 
      </generator> 
     </id> 

     <property name="typeLigne" column="TYPELIGNE" /> 

     <property name="libelle" column="LIBELLE" /> 

     <property name="user" column="USERNAME" /> 

     <property name="processName" column="PROCESSNAME" /> 

     <property name="caseId" column="CASE_ID" /> 

     <property name="dateCreation" insert="false" update="false"> 
      <column name="DCRE" sql-type="date" default="sysdate"></column> 
     </property> 

     <list name="libelles" table="AUDIT_I18N"> 
      <key> 
       <column name="FK_AUDIT_ID" sql-type="number(19,0)" /> 
      </key> 
      <index type="string" column="KEY_" /> 
      <element type="string" column="VALUE_" /> 
     </list> 
    </class> 

最後,我的sql腳本如下:

create sequence AUDIT_SEQ; 
create sequence AUDIT_I18N_SEQ; 

create table AUDIT (
    AUDIT_ID  number(19,0) not null, 
    TYPELIGNE varchar2(255 char), 
    LIBELLE  varchar2(255 char), 
    USERNAME  varchar2(255 char), 
    CASE_ID  varchar2(255 char), 
    PROCESSNAME varchar2(255 char), 
    DCRE   date default sysdate, 
    primary key (AUDIT_ID)); 

create table AUDIT_I18N (
    AUDIT_I18N_ID  number(19,0) not null, 
    KEY_    varchar2(255 char), 
    VALUE_   varchar2(255 char), 
    FK_AUDIT_ID  number(19, 0), 
    primary key (AUDIT_I18N_ID)) 

ALTER TABLE AUDIT_I18N add constraint FK_AUDIT_I18N foreign key (FK_AUDIT_ID) references AUDIT; 

Hibernate的生成在提交異常之前執行以下查詢:

Hibernate: select AUDIT_SEQ.nextval from dual 
Hibernate: insert into AUDIT (TYPELIGNE, LIBELLE, USERNAME, PROCESSNAME, CASE_ID, AUDIT_ID) values (?, ?, ?, ?, ?, ?) 
Hibernate: insert into AUDIT_I18N (FK_AUDIT_ID, KEY_, VALUE_) values (?, ?, ?) 

例外:

com.bpm.domain.AuditEntryStringMap cannot be cast to java.lang.String 

時GenericDaoHibernate.save(T實體)被調用時發生。

回答

0

使用一組而不是列表問題解決了......而這在映射:

<set name="libelles" lazy="extra" cascade="all-delete-orphan"> 
      <cache usage="read-write" include="all" /> 
      <key column="FK_AUDIT_ID"/> 
      <one-to-many class="AuditEntryStringMap" /> 
</set> 

而且,我對AuditEntryStringMap HBM沒有在hibernate.cfg.xml引用。但僅憑這一點就無法解決列表標籤的問題。

半分辨率所以......如果有人知道它爲什麼不能與列表一起工作,將不勝感激全分辨率。