2Hibernate: select tuser0_.user_id as user1_0_0_, tuser0_.user_name as user2_0_0_, tuser0_.user_password as user3_0_0_, tuser0_.user_id_code as user4_0_0_, tuser0_.user_tel as user5_0_0_, tuser0_.user_addr as user6_0_0_, tuser0_.user_zip as user7_0_0_, tuser0_.user_status as user8_0_0_ from epai.dbo.t_user tuser0_ where tuser0_.user_id=?
Hibernate: insert into epai.dbo.goods (buyer_id, saler_id, goods_name, goods_price, goods_pic, goods_desc, begin_time, end_time, goods_status) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
2009-08-18   09:16:39   Unhandled Exception thrown: class org.springframework.dao.InvalidDataAccessApiUsageException   
2009-08-18   09:16:39   Servlet.service() for servlet action threw exception   
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.accp.epai.entity.TUser
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:219)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:242)
at org.hibernate.type.TypeFactory.findDirty(TypeFactory.java:576)
at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:3121)
at org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:472)
at org.hibernate.event.def.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:197)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:120)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:373)
at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:686)
at com.accp.epai.hib.dao.impl.GoodsDaoImpl.add(GoodsDaoImpl.java:13)
at com.accp.epai.hib.biz.impl.GoodsBizImpl.add(GoodsBizImpl.java:19)
at com.accp.epai.web.action.GoodsAction.addGoods(GoodsAction.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:619)直接无语.......

解决方案 »

  1.   

       你给个异常是别人也看不懂只能看个大概   双向跟单向都一样
      一对多那个类配置的是one-to-many
      双向的时候在另一个类配置many-to-one  外键都一样。
      

  2.   

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.accp.epai.entity.Goods" table="goods" schema="dbo" catalog="epai" >
            <id name="goodsId" type="java.lang.Integer">
                <column name="goods_id" />
                <generator class="native" />
            </id>
            <many-to-one name="userByBuyerId" class="com.accp.epai.entity.TUser">
                <column name="buyer_id" />
            </many-to-one>
            <many-to-one name="userBySalerId" class="com.accp.epai.entity.TUser" cascade="all">
                <column name="saler_id" not-null="true" />
            </many-to-one>
            <property name="goodsName" type="java.lang.String">
                <column name="goods_name" length="50" not-null="true" />
            </property>
            <property name="goodsPrice" type="java.lang.Double">
                <column name="goods_price" scale="4" not-null="true" />
            </property>
            <property name="goodsPic" type="java.lang.String">
                <column name="goods_pic" length="500" />
            </property>
            <property name="goodsDesc" type="java.lang.String">
                <column name="goods_desc" length="3000" />
            </property>
            <property name="beginTime" type="java.sql.Date">
                <column name="begin_time" length="23" />
            </property>
            <property name="endTime" type="java.sql.Date">
                <column name="end_time" length="23" />
            </property>
            <property name="goodsStatus" type="java.lang.Integer">
                <column name="goods_status" not-null="true" />
            </property>
            <set name="bids" inverse="true">
                <key>
                    <column name="goods_id" not-null="true" />
                </key>
                <one-to-many class="com.accp.epai.entity.Bid" />
            </set>
        </class>
    </hibernate-mapping>Goods.hbm.xml<?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.accp.epai.entity.TUser" table="t_user" schema="dbo" catalog="epai">
            <id name="userId" type="java.lang.Integer">
                <column name="user_id" />
                <generator class="native" />
            </id>
            <property name="userName" type="java.lang.String">
                <column name="user_name" length="50" not-null="true" />
            </property>
            <property name="userPassword" type="java.lang.String">
                <column name="user_password" length="50" not-null="true" />
            </property>
            <property name="userIdCode" type="java.lang.String">
                <column name="user_id_code" length="20" not-null="true" />
            </property>
            <property name="userTel" type="java.lang.String">
                <column name="user_tel" length="50" not-null="true" />
            </property>
            <property name="userAddr" type="java.lang.String">
                <column name="user_addr" length="300" not-null="true" />
            </property>
            <property name="userZip" type="java.lang.String">
                <column name="user_zip" length="20" not-null="true" />
            </property>
            <property name="userStatus" type="java.lang.Integer">
                <column name="user_status" />
            </property>
            <set name="bids" inverse="true">
                <key>
                    <column name="buyer_id" not-null="true" />
                </key>
                <one-to-many class="com.accp.epai.entity.Bid" />
            </set>
            <set name="goodsesForSalerId" inverse="true">
                <key>
                    <column name="saler_id" not-null="true" />
                </key>
                <one-to-many class="com.accp.epai.entity.Goods" />
            </set>
            <set name="goodsesForBuyerId" inverse="true">
                <key>
                    <column name="buyer_id" />
                </key>
                <one-to-many class="com.accp.epai.entity.Goods" />
            </set>
        </class>
    </hibernate-mapping>TUser.hbm.xmldao层方法public void add(Goods obj) {
    super.getHibernateTemplate().saveOrUpdate(obj); }
    业务逻辑方法 public void add(Goods goods) {
    goodsDao.add(goods);
    }WEB层方法public ActionForward addGoods(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
    GoodsForm goodsForm = (GoodsForm) form;
    Goods goods = goodsForm.getGoods();
    System.out.print(goods.getUserBySalerId().getUserId());//有值
    TUser us = null;
    us=userBiz.selectById(goods.getUserBySalerId().getUserId());//得到了对象
    goods.setUserBySalerId(us);
    goodsBiz.add(goods);
    return mapping.findForward("index");
    }求个高手看看
      

  3.   

    inverse="true">
    你在保存goods时候级联保存user 你的user类一定有个属性=new 属性();(猜测);
      

  4.   

    问题已经解决了.....
    是的...有这个....但不是这个问题....因为在多的一方有两个TUser对象的引用...我只给一个应用赋值了。。所以一直报错....谢谢了啊。
    GF了啊
      

  5.   

    buyer_id 是 not-null的,不设置应当也没有问题。
    不过,不知道你从form取到goods是否已经包含了一个buyerUser,如果有的话,的确会出现unsave transient instance错误。