繁体   English   中英

休眠-一对多

[英]Hibernate - one-to-many

欢迎,

我正在使用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>

我像这样从休眠方式加载数据(会话由spring设置):

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的对象。 ?!?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM