2013-04-24 8 views
0

Добро пожаловать,Hibernate - один-ко-многим

Я использую свойство-исх связать этот внешний ключ с какой-либо другой колонке моего класса, а не первичный ключ. столбец, отличный от первичного ключа, не является уникальным. Теперь, когда я пытаюсь принести эту коллекцию я получаю исключение:

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; 

}

Mapping:

<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(); 
} 

Все работы, когда у меня есть differant значение для иностранца ключа, Exemple:

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 

Но когда у меня есть такое же значение для иностранца Key (Exemple со значением 79 на T_GI_ALARM):

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 

Я действительно не понимаю, что происходит, я думаю, это потому, что у нас нет объектов с уникальным идентификатором. ?!?

ответ

0

Вы должны были установить methodINList в вашем классе QCMethodIN, потому что ваш класс Alarm будет иметь отношение к QCMethodIN, так что это соотношение между многими QCMethodIN и Alarm.

Смежные вопросы