2013-04-24 92 views
0

欢迎,休眠 - 一对多

我正在使用property-ref将这个外键与我的类的一些其他列而不是主键相关联。主键以外的列不是唯一的。现在,当我试图获取此集合我得到异常:

org.hibernate.HibernateException: collection is not associated with any session 

数据库:

T_GI_ALARM 
-ALARM_ID (PK) 
-METHOD_PARAM_NR (FK) 

T_QC_METHOD_IN 
-METHOD_IN_ID (PK) 
-METHOD_PARAM_NR 

结构:

public class Alarm implements Serializable { 
     private static final long serialVersionUID = 1L; 

     private Integer id; 
     private Set <QCMethodIN> methodINList = new HashSet <QCMethodIN>(0); 
} 

public class QCMethodIN implements Serializable { 
    private static final long serialVersionUID = 1L; 

    private Integer id; 
    private Integer methodNr; 

}

映射:

<hibernate-mapping> 
    <class name="gestint.data.model.Alarm" 
     table="DWH1.T_GI_ALARM"> 
     <id name="id" type="java.lang.Integer"> 
      <column name="ALARM_ID" />    
      <generator class="assigned" />    
     </id> 

     <property name="qcMethode" type="java.lang.Integer"> 
      <column name="METHOD_PARAM_NR" not-null="true" /> 
     </property> 
     <set name="methodINList" table="DWH1.T_QC_METHOD_IN" inverse="true" lazy="false" fetch="select"> 
      <key property-ref="qcMethode"> 
       <column name="METHOD_PARAM_NR" not-null="false" /> 
      </key> 
      <one-to-many class="gestint.data.model.QCMethodIN" />   
     </set> 

</hibernate-mapping> 

<hibernate-mapping> 
    <class name="gestint.data.model.QCMethodIN" 
     table="DWH1.T_QC_METHOD_IN"> 
     <id name="id" type="java.lang.Integer"> 
      <column name="METHOD_IN_ID" />    
      <generator class="assigned" />    
     </id>  
     <property name="methodNr" type="java.lang.Integer"> 
      <column name="METHOD_PARAM_NR" not-null="true" /> 
     </property>   

    </class> 
</hibernate-mapping> 

我加载数据形式休眠(会话由弹簧设定)是这样的:

public List<Alarm> listAll() {  
    return this.sessionFactory.getCurrentSession().createQuery("from Alarm").list(); 
} 

一切工作的时候我对外国人关键一歧价值为例:

T_GI_ALARM 
ID METHOD_PARAM_NR 
10021 79 
10022 80 
10020 91 

T_QC_METHOD_IN 
METHOD_IN_ID METHOD_PARAM_NR 
1 79 
2 80 
3 91 

但是,当一个我对外国人密钥的相同的值(与为例对T_GI_ALARM值79):

T_GI_ALARM 
ID METHOD_PARAM_NR 
10021 79 <--!! 
10022 80 
10020 79 <--!! 

T_QC_METHOD_IN 
METHOD_IN_ID METHOD_PARAM_NR 
1 79 <--is call 2 times 
2 80 
3 91 

我得到这个错误:

org.hibernate.HibernateException: collection is not associated with any session 

我真的不明白发生了什么,我想是因为我们没有具有唯一ID的对象。 ?!?

回答

0

您应该在您的QCMethodIN类中设置methodINList,因为您的Alarm类与QCMethodIN有关系,所以它是QCMethodIN和Alarm之间的一对多关系。