Hibernate中SessionFactory创建失败出现ExceptionInInitializerError异常和
Hibernate中SessionFactory创建失败出现ExceptionInInitializerError异常和PropertyNotFoundException异常
请各位好心的高手帮帮我吧,看我的问题要花时间,辛苦您们了,我爱您们!
我建的是学生考试系统,我用的是Hibernate+Struts,服务器是Tomcat5.5,我在登陆页面中输入用户名和密码点“登陆”后服务器中提示
SessionFactory创建失败,浏览器中出现下面的异常信息:
root cause
java.lang.ExceptionInInitializerError
com.zel.dao.hibernate.HibernateUtil. <clinit>(HibernateUtil.java:21)
com.zel.web.struts.action.LoginAction.execute(LoginAction.java:51)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause
org.hibernate.PropertyNotFoundException: Could not find a getter for students in class com.zel.domain.Result
org.hibernate.property.BasicPropertyAccessor.createGetter(BasicPropertyAccessor.java:282)
org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:275)
org.hibernate.mapping.Property.getGetter(Property.java:260)
org.hibernate.tuple.PojoEntityTuplizer.buildPropertyGetter(PojoEntityTuplizer.java:255)
org.hibernate.tuple.AbstractEntityTuplizer. <init>(AbstractEntityTuplizer.java:121)
org.hibernate.tuple.PojoEntityTuplizer. <init>(PojoEntityTuplizer.java:55)
org.hibernate.tuple.TuplizerLookup.create(TuplizerLookup.java:64)
org.hibernate.tuple.EntityMetamodel. <init>(EntityMetamodel.java:257)
org.hibernate.persister.entity.AbstractEntityPersister. <init>(AbstractEntityPersister.java:412)
org.hibernate.persister.entity.SingleTableEntityPersister. <init>(SingleTableEntityPersister.java:108)
org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
org.hibernate.impl.SessionFactoryImpl. <init>(SessionFactoryImpl.java:216)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1176)
com.zel.dao.hibernate.HibernateUtil. <clinit>(HibernateUtil.java:16)
com.zel.web.struts.action.LoginAction.execute(LoginAction.java:51)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
下面是com.zel.dao.hibernate包中的HibernateUtil.java类:
*****************************************************
package com.zel.dao.hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// 在这里创建SessionFactory
sessionFactory = new Configuration().configure()
.buildSessionFactory();
} catch (Throwable ex) {
System.out.println("SessionFactory创建失败,下面是失败的原因:");
ex.printStackTrace();
System.out.println("SessionFactory创建失败?");
throw new ExceptionInInitializerError(ex);
}//这是catch结束的大括号
}
public static final ThreadLocal tLocalsess = new ThreadLocal();
public static final ThreadLocal tLocaltx = new ThreadLocal();
/*
* getting the thread-safe session for using
*/
public static Session currentSession() {
Session session = (Session) tLocalsess.get();
// 如果这里没有发现一个Session,就打开一个新的Session。
try {
if (session == null ¦ ¦ !session.isOpen()) {
session = openSession();
tLocalsess.set(session);
}//if结束。
} catch (HibernateException e) {
// 抛出新的Hibernate的异常HibernateException(e)
e.printStackTrace();
}//这是catch结束的大括号
return session;
}//这是currentSession()方法结束的大括号
/*
* closing the thread-safe session
*/
public static void closeSession() {
Session session = (Session) tLocalsess.get();
tLocalsess.set(null);
try {
if (session != null && session.isOpen()) {
session.close();
}//if结束。
} catch (HibernateException e) {
//抛出新的Hibernate的异常HibernateException(e)
}
}//closeSession()方法结束。
/*
* begin the transaction
*/
public static void beginTransaction() {
System.out.println("begin tx");
Transaction tx = (Transaction) tLocaltx.get();
try {
if (tx == null) {
tx = currentSession().beginTransaction();
tLocaltx.set(tx);
}//if结束
} catch (HibernateException e) {
// 抛出新的InfrastructureException(e)
}
}//beginTransaction()方法结束。
/*
* close the transaction
*/
public static void commitTransaction() {
Transaction tx = (Transaction) tLocaltx.get();
try {
if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()) tx.commit();//if语句。
tLocaltx.set(null);
System.out.println("commit tx");
} catch (HibernateException e) {
// 抛出新的InfrastructureException(e)
}//catch结束
}//commitTransaction() 方法结束
/*
* for rollbacking
*/
public static void rollbackTransaction() {
Transaction tx = (Transaction) tLocaltx.get();
try {
tLocaltx.set(null);
if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()) {
tx.rollback();
}//if结束
} catch (HibernateException e) {
//抛出新的InfrastructureException(e)
}//catch结束
}//rollbackTransaction()结束
private static Session openSession() throws HibernateException {
return getSessionFactory().openSession();
}//openSession()方法结束
private static SessionFactory getSessionFactory() throws HibernateException {
return sessionFactory;
}//getSessionFactory()方法结束
}//HibernateUtil.java类结束
**************************************************************************
由于出现了org.hibernate.PropertyNotFoundException: Could not find a getter for students in class com.zel.domain.Result这样
的一个异常,现在我把相关的代码帖出来:
下面是我在MySQL中创建students表和result表的SQL语句:
**************************************************
students表:
CREATE TABLE students(
name varchar(32) default NULL,
stunumber varchar(32) NOT NULL,
password varchar(32) default NULL,
spe_name varchar(32) NOT NULL,
PRIMARY KEY (stunumber),
CONSTRAINT specialty_namefk FOREIGN KEY(spe_name)REFERENCES specialty(spename))
result表(这个表用students表中的stunumber属性作为外键):
CREATE TABLE result(
resid varchar(32) NOT NULL,
res_cou_name varchar(32) NOT NULL,
res_stunumber varchar(32) NOT NULL,
objective_score varchar(32) default NULL,
subjective_score varchar(32) default NULL,
all_score varchar(32) default NULL,
passorno boolean default false,
PRIMARY KEY (resid),
KEY FK_Course (res_cou_name),
KEY FK_Course2 (res_stunumber),
CONSTRAINT course_idfk19 FOREIGN KEY(res_cou_name)REFERENCES course(couname),
CONSTRAINT course_idfk29 FOREIGN KEY(res_stunumber)REFERENCES students(stunumber))
********************************************************************************************************************
下面是在com.zel.domain包中的Result.java类:
******************************************
package com.zel.domain;
public class Result {
private String resid;
private String res_stunumber;
private String res_cou_name;
private String objective_score;
private String subjective_score;
private String all_score;
boolean passorno;
//下面就是get和set方法,可以自动生成的
}//Result.java类结束
**************************************************************************