Hibernate FAQ

     struts+hibernate做网站中遇到的问题与解决过程

1.如果:去除web.xml,或web.xml中
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
写错。
则:报错信息:
javax.servlet.ServletException: Cannot find message resources under key org.apache.struts.action.MESSAGE
web.xml在tomcat启动时读取。

2.net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml
如果出现这行错误说明你的hibernate的XML配置文件有错


3.net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found
如果出现这行错误说明hibernate的XML配置文件没有找到,你应该把XML文件放在与你的类文件同个目录下,本文中是放在hibernate/classes/hibernate/目录下,也就是跟Hello_Bean.c

lass类文件一起。

4.net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean
如果出现这行错误说明你的xml文件里设置的字段名name的值与Hello_Bean.java类里的getXXX或setXXX方法不一致。

5.net.sf.hibernate.HibernateException: JDBC Driver class not found: org.gjt.mm.mysql.Driver
如果出现这行错误说明你的MYSQL驱动没有加进JB库里或者不在CLASSPATH里。

6.报错:
javax.servlet.ServletException: Exception creating bean of class cn.org.sppc.ipmanager.struts.form.LoginForm: {1}
分析:
在WEB-INF/classes中找不到相对应的LoginForm文件,或者LoginForm没有继承ActionForm类。

7.报错:
javax.servlet.ServletException: persistent class not found: User
分析:
类名User没有在User.hbm.xml文件中写上包名全称,或类持久化类没有找到。


8.报错:
javax.servlet.ServletException: JDBC Driver class not found: org.gjt.mm.mysql.Driver

[WARN] SessionFactoryImpl - -No dialect set - using GenericDialect: Dialect class not found:
net.sf.hibernate.dialect.MySQLDialect

[FATAL] DriverManagerConnectionProvider - -JDBC Driver class not found:
org.gjt.mm.mysql.Driver

[WARN] RequestProcessor - -Unhandled Exception thrown: class net.sf.hibernate.HibernateException

将hibernate.cfg.xml: <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
改成:<property name="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</property>

9.报错:
javax.servlet.ServletException: Cannot find bean articles in any scope
分析:
可能的原因:
1。和tomcat/common/lib/数据库连接jar有关
2。和tomcat/conf/server.xml数据库连接参数有关,ip地址,数据库名称,用户名,密码错误
3。和数据库用户权限更改,权限缩小有关。******重要关系
4。和连接数据库专用class有关。
5。和hibernate.properties中的参数有关。数据库名称,用户名,密码错误。

10.报错:
[FATAL] DatasourceConnectionProvider - -Could not find datasource: java:comp/env/jdbc/soos <javax.naming.NameNotFoundException: Name jdbc is not bound in this

Context>javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
分析:
和tomcat/conf/server.xml数据库连接参数有关。ip地址,数据库名称,用户名,密码错误。


11.javax.servlet.ServletException: Servlet execution threw an exception
[FATAL] DatasourceConnectionProvider - -Could not find datasource: java:comp/env/jdbc/soos <javax.naming.NameNotFoundException: Name jdbc is not bound in this

Context>javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
分析:
和tomcat/conf/server.xml数据库连接参数有关。ip地址,数据库名称,用户名,密码错误。
和tomcat/conf/server.xml中的<Context path="/soos" docBase="soos">有关


12.net.sf.hibernate.QueryException: could not resolve property type: username [select user.password from cn.org.sppc.ipmanager.User user where user.username=?]
解决方法:username在Form类中、在Hibernate的xml文件中和相对应的PO对象中名称都要保持一致(包括大小写)。包括struts-config.xml中的。


13.javax.servlet.jsp.JspException: No getter method for property username of bean org.apache.struts.taglib.html.BEAN
username名称在jsp文件中和在Form类中的不一致。包括struts-config.xml中的。


14.[ERROR] ManagerBase - -IOException while loading persisted sessions: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException:
org.apache.commons.logging.impl.SimpleLog <java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException:
org.apache.commons.logging.impl.SimpleLog>java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException:
org.apache.commons.logging.impl.SimpleLog
Caused by: java.io.NotSerializableException: org.apache.commons.logging.impl.SimpleLog

[ERROR] ManagerBase - -Exception loading sessions from persistent storage <java.io.WriteAbortedException: writing aborted;
java.io.NotSerializableException: org.apache.commons.logging.impl.SimpleLog>java.io.WriteAbortedException: writing aborted;
java.io.NotSerializableException: org.apache.commons.logging.impl.SimpleLog
Caused by: java.io.NotSerializableException: org.apache.commons.logging.impl.SimpleLog

和其他web服务中有logging服务有关。


15.问题:从jsp表单中提交的中文到了action 中从ActionForm中获得的,以及从request.getParameter()中获得的都是乱码的问题。
解决:虽然打印在tomcat console上的是乱码,但是写到数据库中的却是正确的。

16.Missing message for key XXXX.XXXX
1.检查 struts-config.xml中是否包含
<message-resources parameter="com.abcde.ApplicationResources" />
2.在WEB-INF/classes/com/abcde/ApplicationResources.properties是否存在。注意在struts-config.xml中没有properties。
3.检查ApplicationResources.properties是否存在XXX.XXX,我就是因为名字太长没仔细看,一直以为写的是正确的,其实有一个字母写错。查了老半天。
总结:
在没有软件检查语法的地方,首先要仔细检查单词是否写错。例如eclipse不检查非java的代码,除非你装了某个插件。
即使是java代码,eclipse不会告诉你,request.getParameter()中的string参数是否正确,
不会告诉你sql语句是否正确。


17.自己程序中的log.trace, log.info, log.warn等,都没有显示在console中。
原因:发现eclipse没有保存时候自动编译,修改eclipse设置。


18.
<%
String s="ttt.ddd.txt";
String fileNameArray[]=s.split(".");

out.println(fileNameArray.length);
for (int i = 0;i<fileNameArray.length;i++)
{
out.println(fileNameArray[i]);
}
%>
想把文件名分别保存,做了以上的jsp程序,发现不行。想了老半天原来应该这么写。
<%
String s="ttt.txt.abc.yyy.ssdsd";
String fileNameArray[]=s.split("//.");

out.println(fileNameArray.length);
for (int i = 0;i<fileNameArray.length;i++)
{
out.println(fileNameArray[i]);
}
%>
以后玩字符串的时候要注意一些字符的转义了。


19.No action instance for path /dispatchwebshow could be created
解决方法:
struts.config.xml中的相关action 有名称写错,例如:type参数的值有错误。


20.在mysql数据库里定义index这种sql语句关键字作为数据库字段出错。

21.[DEBUG] RequestProcessor - - Looking for Action instance for class cn.org.sppc.ipmanager.struts.action.LogonAction
javax.naming.NameNotFoundException: Name hibernate_connection_factory is not bound in this Context

估计是修改*.hbm.xml文件后发生*.hbm.xml文件语法错误。
研究后发现是hbm.xml和Java之间的不匹配。
子类xml文件中的many-to-one 中name应该写子类中对应的父类属性,class=父类。
子类Java文件中应该定义 父类,和 父类的id号,
父类xml文件中的set中name应该是子类的集合。
父类java文件中应该定义 子类的集合属性.
否则就可能报以上错误。

22.hibernate 2个表联合查询的问题。
在编程过程中发现需要修改表结构,对某个表增加一个id来关联另一个表的主键。
表结构修改后,就开始写hibernate HQL语句,然后取出联合查询的结果,发现另一个表里的数据没有读出,老是报错:java.lang.NullPointException。
我一直以为要么是HQL语句语法错误,要么是HQL语句逻辑上写错,造成读出null数据来。
断断续续对着HQL语句写法搞了一天,终于查出原因,原本新建的用来关联另一个表的主键id,还没有手工添加数据,查出数据来倒真的成了怪事了。
看来还是HQL语句不熟练的问题,否则早就应该自信的想到是其他原因。

23.
HQL语法正确:
String queryString = "select type.typeid, type.typeName, type.comment, type.index, " +
" type.parentTypeid, type.department.departmentName " +
" ,type" + //有没有此对象都可以读出其他数据
" from cn.org.sppc.ipmanager.hibernate.Type as type " +
" inner join type.department as department " +
" where type.parentTypeid=? "+
//" and type.department.departmentid=type.departmentid "+//此处错误
" order by type.index";

以下HQL也能得到同样的数据
String queryString="select type,type.department " +
 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值