读书人

非常急啊 一对多双向关联的有关问题

发布时间: 2011-12-08 21:33:54 作者: rapoo

非常急啊 一对多双向关联的问题 大伙帮帮忙啊!!!!!!! 88分献上
我用main 方法测试 报错内容是:
Exception in thread "main" java.lang.ClassCastException: org.hibernate.collection.PersistentSet
at T.main(T.java:50)

代码如下

Acceptence.hbm.xml

Java code
<hibernate-mapping>    <class name="com.plat.acc.dao.Acceptence" table="syn_acceptence" schema="dbo" catalog="test">        <id name="id" type="java.lang.Integer">            <column name="id"/>            <generator class="assigned" />        </id>        <property name="companyNo" type="java.lang.String">            <column name="company_no" length="200" not-null="true" />        </property>        <property name="bankId" type="java.lang.Integer">            <column name="bank_id"  not-null="true" />        </property>        <property name="factoryId" type="java.lang.Integer">            <column name="factory_id" not-null="true" />        </property>        <property name="iscomplete" type="java.lang.String">            <column name="iscomplete" length="1" />        </property>        <property name="lasttimesstamp" type="java.lang.String">            <column name="lasttimesstamp" length="20" />        </property>        <property name="isstage" type="java.lang.String">            <column name="isstage" length="1" />        </property>        <property name="remark" type="java.lang.String">            <column name="remark" length="2000" />        </property>        <set name="synReceipt" table="syn_receipt" cascade="all" lazy="false" inverse="true">              <key column="acc_id" />              <one-to-many class="com.plat.receipt.dao.SynReceipt" />          </set>    </class></hibernate-mapping>

"多"SynReceipt.hbm.xml
Java code
<hibernate-mapping>    <class name="com.plat.receipt.dao.SynReceipt" table="syn_receipt" schema="dbo" catalog="test">        <id name="id" type="java.lang.Integer">            <column name="id" />            <generator class="increment" />        </id>        <property name="purQty" type="java.lang.Double">            <column name="pur_qty" precision="18" />        </property>        <property name="purPrice" type="java.lang.Double">            <column name="pur_price" precision="18" />        </property>        <property name="purAmt" type="java.lang.Double">            <column name="pur_amt" precision="18" />        </property>        <property name="receiveQty" type="java.lang.Double">            <column name="receive_qty" precision="18" />        </property>        <property name="receiveAmt" type="java.lang.Double">            <column name="receive_amt" precision="18" />        </property>        <property name="logistic" type="java.lang.String">            <column name="logistic" length="200" />        </property>        <property name="receiveDate" type="java.lang.String">            <column name="receive_date" length="20" />        </property>        <many-to-one name="acceptence" class="com.plat.acc.dao.Acceptence" lazy="false"        fetch="select" cascade="all">            <column name="acc_id" not-null="true" />        </many-to-one>        <property name="productId" type="java.lang.Integer">            <column name="product_id" not-null="true" />        </property>        <property name="financeNo" type="java.lang.String">            <column name="finance_no" length="200" />        </property>    </class></hibernate-mapping> 


Acceptence.java
Java code
package com.plat.acc.dao;/** * SynAcceptence entity. *  * @author MyEclipse Persistence Tools */public class Acceptence extends AbstractAcceptence implements        java.io.Serializable {    // Constructors    /**     *      */    private static final long serialVersionUID = 1L;    /** default constructor */    public Acceptence() {    }    /** minimal constructor */    public Acceptence(Integer id, String companyNo, Integer bankId, Integer factoryId) {        super(id, companyNo, bankId, factoryId);    }    /** full constructor */    public Acceptence(Integer id, String companyNo, Integer bankId,            Integer factoryId, String iscomplete, String lasttimesstamp,            String isstage, String remark) {        super(id, companyNo, bankId, factoryId, iscomplete, lasttimesstamp,                isstage, remark);    }}


集成的spring + hibernate 是用myeclipse6 生成的 模板代码
AcceptenceDAO.java 我贴出我使用的这个方法
Java code
public Acceptence findById(java.lang.Integer id) {        log.debug("getting SynAcceptence instance with id: " + id);        try {            Acceptence instance = (Acceptence) getHibernateTemplate()                    .get("com.plat.acc.dao.Acceptence", id);            return instance;        } catch (RuntimeException re) {            log.error("get failed", re);            throw re;        }    }




测试类如下
Java code
    public static void main(String[] args) {                        AcceptenceDAO ad=(AcceptenceDAO)BeanUtil.getBean("AcceptenceDAO");//我自己封装了下BeanUtil 此行没问题                Set s=(HashSet)ad.findById(1).getSynReceipt();                System.out.println(s.size());                SynReceipt receipt=dao.findById(1);            }}


[解决办法]

[解决办法]
没发现问题,用java.util.set应该没问题,看看man里面是不是引入包引错了
[解决办法]
你的测试类写的不对
Set s=(HashSet)ad.findById(1).getSynReceipt();
为什么要造型到HashSet,你能拿到Set接口就行了呀
Hibernate自己实现了JDK中的集合接口,包括Map、Set、List等等,你只要根据接口编程就可以了,没必要造型到实现类
[解决办法]
探讨
你的测试类写的不对
Set s=(HashSet)ad.findById(1).getSynReceipt();
为什么要造型到HashSet,你能拿到Set接口就行了呀
Hibernate自己实现了JDK中的集合接口,包括Map、Set、List等等,你只要根据接口编程就可以了,没必要造型到实现类

[解决办法]
" java.lang.ClassCastException: org.hibernate.collection.PersistentSet

而且你这里也是转型错误.

读书人网 >J2EE开发

热点推荐