我正在尝试在Eclipse中开发一个动态Web项目。我正在使用hibernate 3,tomcat 6。我的网页有一个简单的注册表格。它接受用户数据并将其添加到db。 我正在使用hibernate来做这个部分。 我收到了这个错误。尝试过在一些类似问题中给出的解决方案,但无法解决问题。 我得到的错误是
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
May 23, 2014 10:20:30 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet NavigationController threw exception
org.hibernate.HibernateException: Could not parse configuration: hibernate.cfg.xml
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1491)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1425)
at com.pkg.dao.UserDAO.registeruser(UserDAO.java:58)
at com.pkg.controller.NavigationController.doPost(NavigationController.java:60)
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 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:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: org.dom4j.DocumentException: hibernate.sourceforge.net Nested exception: hibernate.sourceforge.net
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1481)
... 17 more
我的Customer.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">
<hibernate-mapping>
<class name="com.pkg.bean.CustomerBean" table="r_customer">
<id name="CUSTOMERID" column="CUSTOMERID" type="String">
<generator class="assigned"/>
</id>
<property name="PASSWORD" column="PASSWORD" type="String"/>
<property name="CUSTOMERNAME" column="CUSTOMERNAME" type="String"/>
<property name="CONTACTNUMBER" column="CONTACTNUMBER" type="String"/>
</class>
</hibernate-mapping>
并且通过hibernate配置文件是
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:javadb</property>
<property name="connection.username">user</property>
<property name="connection.password">password</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.OracleDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto"></property>
<mapping resource="Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
任何人都可以帮我解决问题。
答案 0 :(得分:1)
你有空
<property name="hbm2ddl.auto"></property>
在那里加上一些值update/create
。
答案 1 :(得分:1)
我对代码所做的更改是
在我的Customer.hbm.xml
文件中
我将列的类型从type="String"
更改为type="string"
在hibernate.cfg.xml
文件中,我已经在数据库中创建了表
我评论了<property name="hbm2ddl.auto">create</property>
问题似乎是系统特定的,因为代码在我的家用电脑中没有任何打嗝但正在显示
我的办公室电脑出现org.hibernate.HibernateException: Could not parse configuration: hibernate.cfg.xml
错误。
在家我正在使用Eclipse Kepler,Tomcat 7和hibernate 3.6.4 Final
办公室里有Eclipse Galileo,Tomcat 6和hibernate 3.x.x
我不确定是否真的希望真正解决问题或问题悄悄进入。
答案 2 :(得分:0)
我注意到您的hibernate.cfg.xml
引用了Customer.hbm.xml
,该文件引用了一个类com.pkg.bean.CustomerBean
。它可能没有错,但它不遵循惯例,所以我怀疑那里可能是一个问题:
根据这些约定,hbm.xml
文件将与其类存储在同一个包中。如果是这种情况,可能您应该将其引用为com/pkg/bean/Customer.hbm.xml
。
另一个惯例是使用与hbm.xml
文件相同的名称命名文件。那么它就是CustomerBean.hbm.xml
。
根据您发布的信息,这只是猜测。我不确定这些“惯例”中是否有任何规则会导致异常(如果损坏)(自从我阅读文档以来已经很长时间了,而且我通常会遵循最佳实践,因此我从未测试过如果我没有做过会发生什么事情'吨)。