双向一对多,出错

zhaoyunrui 2009-08-18 09:18:31
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)



直接无语.......
...全文
99 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
好吃的松子 2009-08-18
  • 打赏
  • 举报
回复
buyer_id 是 not-null的,不设置应当也没有问题。
不过,不知道你从form取到goods是否已经包含了一个buyerUser,如果有的话,的确会出现unsave transient instance错误。
zhaoyunrui 2009-08-18
  • 打赏
  • 举报
回复
问题已经解决了.....
是的...有这个....但不是这个问题....因为在多的一方有两个TUser对象的引用...我只给一个应用赋值了。。所以一直报错....谢谢了啊。。。。


GF了啊
lilei_465730396 2009-08-18
  • 打赏
  • 举报
回复
inverse="true">
你在保存goods时候级联保存user 你的user类一定有个属性=new 属性();(猜测);
lilei_465730396 2009-08-18
  • 打赏
  • 举报
回复
你在保存对象的时候,这个对象与另一个对象关联,并且配置了级联保存,而另一个对象没有保存,导致报错
zhaoyunrui 2009-08-18
  • 打赏
  • 举报
回复
<?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.xml



dao层方法
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");
}


求个高手看看



aspects 2009-08-18
  • 打赏
  • 举报
回复
你给个异常是别人也看不懂只能看个大概 双向跟单向都一样
一对多那个类配置的是one-to-many
双向的时候在另一个类配置many-to-one 外键都一样。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧