表massage 和表teacher建立多对多关系,在java.文件中,建立一个继承 TestCase的java文件中可以正确执行Hibernate: insert into t_teacher_massage (msg_id, teacher_id) values (?, ?)建立他们之之间的关系。如下
session = HibernateSessionFactory.getSession();
tx = session.beginTransaction();
Massage msg = new Massage();
Teacher thr = new Teacher();
int msg_id = 3;
int teacher_id = 2;
msg = (Massage) session.get(Massage.class, msg_id);
thr = (Teacher) session.get(Teacher.class, teacher_id); Set teachers = msg.getTeachers();
teachers.add(thr);
msg.setTeachers(teachers); session.save(msg); session.getTransaction().commit();但是在网页上对些进行操作就不行,而且在网页操作了之后,出现了如下的异常,那么上面的方法再也不能用,只有drop database之后才可以用。
问题已经困扰几天了,希望啊个大侠解决下。Hibernate: select massage0_.msg_id as msg1_13_0_, massage0_.firname as firname13_0_, massage0_.sex as sex13_0_, massage0_.telephone as telephone13_0_, massage0_.mobel as mobel13_0_, massage0_.address as address13_0_, massage0_.schoolgrade as schoolgr7_13_0_, massage0_.studyinf as studyinf13_0_, massage0_.pay as pay13_0_, massage0_.req as req13_0_, massage0_.stu_id as stu11_13_0_, massage0_.tea_id as tea12_13_0_, massage0_.postdate as postdate13_0_, massage0_.onesubject as onesubject13_0_, massage0_.state as state13_0_, massage0_.threquire as threquire13_0_ from t_massage massage0_ where massage0_.msg_id=?
Hibernate: select teacher0_.user_id as user1_9_0_, teacher0_.username as username9_0_, teacher0_.pwd as pwd9_0_, teacher0_.rote as rote9_0_, teacher0_.ch_name as ch5_9_0_, teacher0_.email as email9_0_, teacher0_.sex as sex9_0_, teacher0_.birthday as birthday9_0_, teacher0_.nation as nation9_0_, teacher0_.province as province9_0_, teacher0_.school as school9_0_, teacher0_.subject as subject9_0_, teacher0_.exp_intr as exp13_9_0_, teacher0_.telephone as telephone9_0_, teacher0_.mobel as mobel9_0_, teacher0_.state as state9_0_, teacher0_.qq as qq9_0_, teacher0_.registertime as registe18_9_0_, teacher0_.onesubject as onesubject9_0_, teacher0_.education as education9_0_, teacher0_.postdate as postdate9_0_ from t_teacher teacher0_ where teacher0_.user_id=?
Hibernate: select teachers0_.msg_id as msg2_1_, teachers0_.teacher_id as teacher1_1_, massage1_.msg_id as msg1_13_0_, massage1_.firname as firname13_0_, massage1_.sex as sex13_0_, massage1_.telephone as telephone13_0_, massage1_.mobel as mobel13_0_, massage1_.address as address13_0_, massage1_.schoolgrade as schoolgr7_13_0_, massage1_.studyinf as studyinf13_0_, massage1_.pay as pay13_0_, massage1_.req as req13_0_, massage1_.stu_id as stu11_13_0_, massage1_.tea_id as tea12_13_0_, massage1_.postdate as postdate13_0_, massage1_.onesubject as onesubject13_0_, massage1_.state as state13_0_, massage1_.threquire as threquire13_0_ from t_teacher_massage teachers0_ left outer join t_massage massage1_ on teachers0_.teacher_id=massage1_.msg_id where teachers0_.msg_id=?
teachers.size: 0
teachers.size: 1
Hibernate: insert into t_teacher_massage (msg_id, teacher_id) values (?, ?)
10:32:10,375  WARN JDBCExceptionReporter:71 - SQL Error: 1452, SQLState: 23000
10:32:10,390 ERROR JDBCExceptionReporter:72 - Cannot add or update a child row: a foreign key constraint fails (`dbteach/t_teacher_massage`, CONSTRAINT `FK1261FC63E7CFA31C` FOREIGN KEY (`teacher_id`) REFERENCES `t_massage` (`msg_id`))
10:32:10,390 ERROR AbstractFlushingEventListener:301 - 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:249)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at com.swust.teach.manager.MsgaddManagerImpl.employ(MsgaddManagerImpl.java:151)
at com.swust.teach.actions.MsgaddAction.employ(MsgaddAction.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at com.swust.teach.actions.BaseAction.execute(BaseAction.java:21)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.BatchUpdateException: Cannot add or update a child row: a foreign key constraint fails (`dbteach/t_teacher_massage`, CONSTRAINT `FK1261FC63E7CFA31C` FOREIGN KEY (`teacher_id`) REFERENCES `t_massage` (`msg_id`))
at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:648)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
... 39 more

解决方案 »

  1.   


    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:249)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
    at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
    at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
    at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
    at com.swust.teach.manager.MsgaddManagerImpl.employ(MsgaddManagerImpl.java:151)
    at com.swust.teach.actions.MsgaddAction.employ(MsgaddAction.java:42)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
    at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)
    Caused by: java.sql.BatchUpdateException: Cannot add or update a child row: a foreign key constraint fails (`dbteach/t_teacher_massage`, CONSTRAINT `FK1261FC63E7CFA31C` FOREIGN KEY (`teacher_id`) REFERENCES `t_massage` (`msg_id`))
    at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:648)
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
    ... 39 more