开发者社区> 问答> 正文

hibernate多对多报错?报错

5个表,关系如下:

报错信息:

严重: Servlet.service() for servlet jsp threw exception
org.hibernate.MappingException: Foreign key (FKEE834461D63EFD3A:answersheet [surQue_id])) must have same number of columns as the referenced primary key (sur_que [survey_id,question_id])
	at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:113)
	at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:96)
	at org.hibernate.cfg.Configuration.secondPassCompileForeignKeys(Configuration.java:1310)
	at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1217)
	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:329)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1333)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
	at com.util.HibernateSessionFactory.<clinit>(HibernateSessionFactory.java:21)
	at com.daoImpl.RoleDaoImpl.<init>(RoleDaoImpl.java:16)
	at org.apache.jsp.Login_jsp._jspService(Login_jsp.java:124)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	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 com.util.ChinaFilter.doFilter(ChinaFilter.java:16)
	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:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879)
	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:600)
	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1703)
	at java.lang.Thread.run(Thread.java:619)

具体请看:http://www.iteye.com/problems/97400

展开
收起
爱吃鱼的程序员 2020-06-22 17:16:35 582 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    没人回答!我就自己答啦!报错语句:Foreignkey(FKEE834461D63EFD3A:answersheet[surQue_id]))musthavesamenumberofcolumnsasthereferencedprimarykey(sur_que[survey_id,question_id])意思就是:answersheet表的外键surQue_id对应的表sur_que的主键是联合主键[survey_id,question_id],而在answersheet外键就写了一个,应该写两个,即(survey_id,question_id)才对。

    解决办法:hibernate多对多@ManyToMany生成的中间表默认是联合主键的,即使你在中间表的实体类中加入@Id也不行。只有手动建表,但是手动建表也不能消除这个bug,所以你只要把多对多用两个多对一替换就行啦!

    2020-06-22 17:16:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载