Hibernate映射新列导致登录失败

时间:2018-09-06 21:05:33

标签: java hibernate struts

我继承了一个struts和休眠应用程序。我们需要更改表以包含一些其他列。我运行了一个alter Table脚本来手动添加列。我向模型Java文件以及hibermate hbm文件添加了其他列属性。

但是,当我编译并运行应用程序时,它就可以正常运行了。但是登录到我的应用程序时出现错误。

如果我从hbm中删除了属性标签,则可以正常登录。当hbm中存在新的属性标签时,登录失败。我在这里想念什么?我尝试过重新编译应用程序,但似乎没有任何效果。

编辑 这是我获得的唯一堆栈跟踪,不会在tomcat或为该应用程序设置的任何其他记录器中输出到屏幕上。

javax.servlet.jsp.JspException: Define tag cannot set a null value
at org.apache.struts.taglib.bean.DefineTag.doEndTag(DefineTag.java:236)
at org.apache.jsp.pages.v2.Main_jsp._jspService(Main_jsp.java:391)
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 org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at controller.LoginServlet.doPost(LoginServlet.java:233)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
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.bureaueye.beacon.filter.PerformanceLogFilter.doFilter(PerformanceLogFilter.java:119)
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:662)

我一直在进行一些挖掘,发现我正在使用hibernate 3,并且在我的hiberbate.cfg.xml文件中,我的配置中没有此属性,但是,添加它似乎并没有任何区别。

<property name="hibernate.hbm2ddl.auto">validate</property>

我还找到了一个.hibernateSynchronizer3目录,但是我不确定这是否会起作用。

1 个答案:

答案 0 :(得分:0)

继承了项目后,我尝试遵循以前在项目中建立的约定。类中新属性被映射到的注释指示不要手动更改文件,因为它们会由于映射文件中的任何更改而丢失。
如果<property name="hibernate.hbm2ddl.auto">validate</property> 实际配置并正常工作。它将相应地添加这些新属性。但是,这些自动更改并没有发生。因此,我尝试按照该类文件中的约定手动添加getter / setter方法。 该应用程序将启动,即使它无法建立与数据池的连接。这些异常已被捕获,并且没有暴露给记录器。 在将断点放置到各种文件中之后,我终于发现,我编写的getter和setter方法的命名方式不是休眠所期望的。更改了方法名称以使其符合Hibernate的预期后,我便能够启动我的应用程序并成功登录。