论坛首页 Java版 Hibernate

关于主子表插入问题

浏览 2301 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2006-09-04
这个问题困扰我一天了.也没有被解决掉.很是郁闷.看看哪位仁兄帮忙看一下啊.
我用的是
mysql5.1
hibernate3.1.3

[quote]
2006-09-04 15:13:20,546 WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1452, SQLState: 23000
2006-09-04 15:13:20,546 ERROR org.hibernate.util.JDBCExceptionReporter - Cannot add or update a child row: a foreign key constraint fails (`joinset/js_function`, CONSTRAINT `FKBB647A0ED8DE531D` FOREIGN KEY (`id`) REFERENCES `js_module` (`id`))
2006-09-04 15:13:20,562 ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:202)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
at org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:815)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)
at org.springframework.orm.hibernate3.HibernateTemplate.flush(HibernateTemplate.java:813)
at com.joinset.common.hibernate.AbstractManager.flush(AbstractManager.java:90)
at com.joinset.common.hibernate.AbstractManager.merge(AbstractManager.java:49)
at com.joinset.console.security.dao.impl.FunctionDaoImpl.save(FunctionDaoImpl.java:16)
at com.joinset.console.security.serivce.impl.FunctionManagerImpl.save(FunctionManagerImpl.java:20)
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:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:181)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy2.save(Unknown Source)
at com.joinset.console.security.struts.action.FunctionAction.save(FunctionAction.java:41)
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:585)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
at com.joinset.common.struts.BaseAction.execute(BaseAction.java:95)
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:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:75)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:535)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:790)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:709)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:572)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:644)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.sql.BatchUpdateException: Cannot add or update a child row: a foreign key constraint fails (`joinset/js_function`, CONSTRAINT `FKBB647A0ED8DE531D` FOREIGN KEY (`id`) REFERENCES `js_module` (`id`))
at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:647)
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:294)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
... 70 more
2006-09-04 15:13:20,593 WARN org.apache.struts.action.RequestProcessor - Unhandled Exception thrown: class org.springframework.dao.DataIntegrityViolationException
[/quote][/quote]
Function.hbm.xml
[code:1]
<many-to-one
name="module"
class="com.joinset.console.security.domain.Module"
cascade="none"
outer-join="auto"
column="module_id"
not-null="true"
/>[/code:1]
Module.hbm.xml
[code:1] <set
name="functions"
table="js_function"
lazy="true"
inverse="true"
cascade="all-delete-orphan"
sort="unsorted"
outer-join="auto"
>

<key
column="id"
>
</key>

<one-to-many
class="com.joinset.console.security.domain.Function"
/>

</set>[/code:1]
   
时间:2006-09-05
难道大家都没有遇到过这个问题吗?
   
0 请登录后投票
时间:2006-09-05
你在one方设置了inverse="true" 让many方来维护关系

可你在many方又设置了cascade="none" ,

我觉得应该是这个问题
   
0 请登录后投票
时间:2006-09-05
java虫 写道
你在one方设置了inverse="true" 让many方来维护关系

可你在many方又设置了cascade="none" ,

我觉得应该是这个问题


我就是这样写的,也没报错。建议看看数据库。。
   
0 请登录后投票
时间:2006-09-06
你是要做一对多映射吗?

两个配置文件得column不一样呀。

把你的代码贴出来
   
0 请登录后投票
时间:2006-09-06
翅膀 写道
java虫 写道
你在one方设置了inverse="true" 让many方来维护关系

可你在many方又设置了cascade="none" ,

我觉得应该是这个问题


我就是这样写的,也没报错。建议看看数据库。。



不好意思,是可以 。。

他的one方设置了这个cascade="all-delete-orphan"
   
0 请登录后投票
时间:2006-09-06
[code:1]<set>
<key column="id">
</key>
</set>
[/code:1]
你用many一方的id来做key的吗?让它既做主键又做外键?

那你设置的的:
[code:1]<many-to-one
column="module_id"
/>[/code:1]
是做什么用的呢?
   
0 请登录后投票
时间:2006-09-07
能不能把完整的代码帖出来啊?
   
0 请登录后投票
论坛首页 Java版 Hibernate

跳转论坛:
JavaEye推荐