Hibernate中SessionFactory创建失败出现ExceptionInInitializerError异常和

zhuenlai 2008-04-03 09:29:17
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类结束
**************************************************************************
...全文
244 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
li_d_s 2008-04-03
  • 打赏
  • 举报
回复
com.zel.domain.Result类没有getStudent和setStudent方法
SINODATA_QJF 2008-04-03
  • 打赏
  • 举报
回复
按照错误提示,是不是你的Result类里面少定义了Student类型student的定义?
而这个student你已经在映射文件里面引用?
zhuenlai 2008-04-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tubage408 的回复:]
你生成的Result.java里应该有个Students类型的对象才对呀,同事也该有个Course对象呀
[/Quote]
zhuenlai 2008-04-03
  • 打赏
  • 举报
回复
我在Result类中加了getStudents和setStudents方法后,上面的问题解决了.但又出现了类似的问题.即使在Specialty.java类中加getStudents和setStudents方法后也解决不了:
org.hibernate.PropertyNotFoundException: Could not find a getter for students in class com.zel.domain.Specialty
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)

下面是我创建students表和specialty表的SQL语句:
*****************************************
specialty表:
CREATE TABLE specialty(
speid varchar(32) NOT NULL,
spename varchar(50) NOT NULL,
PRIMARY KEY (spename)
)
students表(用specialty表的spename作为外键):
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))
*******************************************************************************************
下面是我的Specialty.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">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.zel.domain.Specialty" table="specialty" catalog="examesystem">
<id name="spename" type="java.lang.String">
<column name="spename" length="50" />
<generator class="assigned" />
</id>
<property name="speid" type="java.lang.String">
<column name="speid" length="32" not-null="true" />
</property>
<set name="students" inverse="true">
<key>
<column name="spe_name" length="32" not-null="true" />
</key>
<one-to-many class="com.zel.domain.Students" />
</set>
</class>
</hibernate-mapping>
*******************************************************************************************
下面是Students.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">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.zel.domain.Students" table="students" catalog="examesystem">
<id name="stunumber" type="java.lang.String">
<column name="stunumber" length="32" />
<generator class="assigned" />
</id>
<many-to-one name="specialty" class="com.zel.domain.Specialty" fetch="select">
<column name="spe_name" length="32" not-null="true" />
</many-to-one>
<property name="name" type="java.lang.String">
<column name="name" length="32" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="32" />
</property>
<set name="subjectivedones" inverse="true">
<key>
<column name="sd_stu_number" length="32" not-null="true" />
</key>
<one-to-many class="com.zel.domain.Subjectivedone" />
</set>
<set name="results" inverse="true">
<key>
<column name="res_stunumber" length="32" not-null="true" />
</key>
<one-to-many class="com.zel.domain.Result" />
</set>
</class>
</hibernate-mapping>
**************************************************************************************
下面是com.zel.domain包中的Students.java类:
****************************************
package com.zel.domain;
import com.zel.dao.DAOFactory;
import com.zel.dao.SpecialtyDAO;
public class Students {
private String stunumber;
private String name;
private String password;
private String spe_name;
Specialty specialty;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSpe_name() {
return spe_name;
}
public void setSpe_name(String spe_name) {
SpecialtyDAO speDao=DAOFactory.getInstance().createSpecialtyDAO();
Specialty spe=speDao.getSpecialtyByID(spe_name);
this.spe_name = spe.getSpename();
}
public String getStunumber() {
return stunumber;
}
public void setStunumber(String stunumber) {
this.stunumber = stunumber;
}
public Specialty getSpecialty() {
return specialty;
}
public void setSpecialty(Specialty specialty) {
this.specialty = specialty;
}

}
zhuenlai 2008-04-03
  • 打赏
  • 举报
回复
我在Result类中加了getStudents和setStudents方法后,上面的问题解决了.但又出现了类似的问题.即使在Specialty.java类中加getStudents和setStudents方法后也解决不了:
org.hibernate.PropertyNotFoundException: Could not find a getter for students in class com.zel.domain.Specialty
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)

下面是我创建students表和specialty表的SQL语句:
*****************************************
specialty表:
CREATE TABLE specialty(
speid varchar(32) NOT NULL,
spename varchar(50) NOT NULL,
PRIMARY KEY (spename)
)
students表(用specialty表的spename作为外键):
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))
*******************************************************************************************
下面是我的Specialty.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">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.zel.domain.Specialty" table="specialty" catalog="examesystem">
<id name="spename" type="java.lang.String">
<column name="spename" length="50" />
<generator class="assigned" />
</id>
<property name="speid" type="java.lang.String">
<column name="speid" length="32" not-null="true" />
</property>
<set name="students" inverse="true">
<key>
<column name="spe_name" length="32" not-null="true" />
</key>
<one-to-many class="com.zel.domain.Students" />
</set>
</class>
</hibernate-mapping>
*******************************************************************************************
下面是Students.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">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.zel.domain.Students" table="students" catalog="examesystem">
<id name="stunumber" type="java.lang.String">
<column name="stunumber" length="32" />
<generator class="assigned" />
</id>
<many-to-one name="specialty" class="com.zel.domain.Specialty" fetch="select">
<column name="spe_name" length="32" not-null="true" />
</many-to-one>
<property name="name" type="java.lang.String">
<column name="name" length="32" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="32" />
</property>
<set name="subjectivedones" inverse="true">
<key>
<column name="sd_stu_number" length="32" not-null="true" />
</key>
<one-to-many class="com.zel.domain.Subjectivedone" />
</set>
<set name="results" inverse="true">
<key>
<column name="res_stunumber" length="32" not-null="true" />
</key>
<one-to-many class="com.zel.domain.Result" />
</set>
</class>
</hibernate-mapping>
**************************************************************************************
下面是com.zel.domain包中的Students.java类:
****************************************
package com.zel.domain;
import com.zel.dao.DAOFactory;
import com.zel.dao.SpecialtyDAO;
public class Students {
private String stunumber;
private String name;
private String password;
private String spe_name;
Specialty specialty;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSpe_name() {
return spe_name;
}
public void setSpe_name(String spe_name) {
SpecialtyDAO speDao=DAOFactory.getInstance().createSpecialtyDAO();
Specialty spe=speDao.getSpecialtyByID(spe_name);
this.spe_name = spe.getSpename();
}
public String getStunumber() {
return stunumber;
}
public void setStunumber(String stunumber) {
this.stunumber = stunumber;
}
public Specialty getSpecialty() {
return specialty;
}
public void setSpecialty(Specialty specialty) {
this.specialty = specialty;
}

}
zhuenlai 2008-04-03
  • 打赏
  • 举报
回复
我在Result类中加了getStudents和setStudents方法后,上面的问题解决了.但又出现了类似的问题.即使在Specialty.java类中加getStudents和setStudents方法后也解决不了:
org.hibernate.PropertyNotFoundException: Could not find a getter for students in class com.zel.domain.Specialty
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)

下面是我创建students表和specialty表的SQL语句:
*****************************************
specialty表:
CREATE TABLE specialty(
speid varchar(32) NOT NULL,
spename varchar(50) NOT NULL,
PRIMARY KEY (spename)
)
students表(用specialty表的spename作为外键):
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))
*******************************************************************************************
下面是我的Specialty.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">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.zel.domain.Specialty" table="specialty" catalog="examesystem">
<id name="spename" type="java.lang.String">
<column name="spename" length="50" />
<generator class="assigned" />
</id>
<property name="speid" type="java.lang.String">
<column name="speid" length="32" not-null="true" />
</property>
<set name="students" inverse="true">
<key>
<column name="spe_name" length="32" not-null="true" />
</key>
<one-to-many class="com.zel.domain.Students" />
</set>
</class>
</hibernate-mapping>
*******************************************************************************************
下面是Students.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">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.zel.domain.Students" table="students" catalog="examesystem">
<id name="stunumber" type="java.lang.String">
<column name="stunumber" length="32" />
<generator class="assigned" />
</id>
<many-to-one name="specialty" class="com.zel.domain.Specialty" fetch="select">
<column name="spe_name" length="32" not-null="true" />
</many-to-one>
<property name="name" type="java.lang.String">
<column name="name" length="32" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="32" />
</property>
<set name="subjectivedones" inverse="true">
<key>
<column name="sd_stu_number" length="32" not-null="true" />
</key>
<one-to-many class="com.zel.domain.Subjectivedone" />
</set>
<set name="results" inverse="true">
<key>
<column name="res_stunumber" length="32" not-null="true" />
</key>
<one-to-many class="com.zel.domain.Result" />
</set>
</class>
</hibernate-mapping>
**************************************************************************************
下面是com.zel.domain包中的Students.java类:
****************************************
package com.zel.domain;
import com.zel.dao.DAOFactory;
import com.zel.dao.SpecialtyDAO;
public class Students {
private String stunumber;
private String name;
private String password;
private String spe_name;
Specialty specialty;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSpe_name() {
return spe_name;
}
public void setSpe_name(String spe_name) {
SpecialtyDAO speDao=DAOFactory.getInstance().createSpecialtyDAO();
Specialty spe=speDao.getSpecialtyByID(spe_name);
this.spe_name = spe.getSpename();
}
public String getStunumber() {
return stunumber;
}
public void setStunumber(String stunumber) {
this.stunumber = stunumber;
}
public Specialty getSpecialty() {
return specialty;
}
public void setSpecialty(Specialty specialty) {
this.specialty = specialty;
}

}
zhuenlai 2008-04-03
  • 打赏
  • 举报
回复
我在Result类中加了getStudents和setStudents方法后,上面的问题解决了.但又出现了类似的问题.即使在Specialty.java类中加getStudents和setStudents方法后也解决不了:
org.hibernate.PropertyNotFoundException: Could not find a getter for students in class com.zel.domain.Specialty
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)

下面是我创建students表和specialty表的SQL语句:
*****************************************
specialty表:
CREATE TABLE specialty(
speid varchar(32) NOT NULL,
spename varchar(50) NOT NULL,
PRIMARY KEY (spename)
)
students表(用specialty表的spename作为外键):
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))
*******************************************************************************************
下面是我的Specialty.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">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.zel.domain.Specialty" table="specialty" catalog="examesystem">
<id name="spename" type="java.lang.String">
<column name="spename" length="50" />
<generator class="assigned" />
</id>
<property name="speid" type="java.lang.String">
<column name="speid" length="32" not-null="true" />
</property>
<set name="students" inverse="true">
<key>
<column name="spe_name" length="32" not-null="true" />
</key>
<one-to-many class="com.zel.domain.Students" />
</set>
</class>
</hibernate-mapping>
*******************************************************************************************
下面是Students.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">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.zel.domain.Students" table="students" catalog="examesystem">
<id name="stunumber" type="java.lang.String">
<column name="stunumber" length="32" />
<generator class="assigned" />
</id>
<many-to-one name="specialty" class="com.zel.domain.Specialty" fetch="select">
<column name="spe_name" length="32" not-null="true" />
</many-to-one>
<property name="name" type="java.lang.String">
<column name="name" length="32" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="32" />
</property>
<set name="subjectivedones" inverse="true">
<key>
<column name="sd_stu_number" length="32" not-null="true" />
</key>
<one-to-many class="com.zel.domain.Subjectivedone" />
</set>
<set name="results" inverse="true">
<key>
<column name="res_stunumber" length="32" not-null="true" />
</key>
<one-to-many class="com.zel.domain.Result" />
</set>
</class>
</hibernate-mapping>
**************************************************************************************
下面是com.zel.domain包中的Students.java类:
****************************************
package com.zel.domain;
import com.zel.dao.DAOFactory;
import com.zel.dao.SpecialtyDAO;
public class Students {
private String stunumber;
private String name;
private String password;
private String spe_name;
Specialty specialty;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSpe_name() {
return spe_name;
}
public void setSpe_name(String spe_name) {
SpecialtyDAO speDao=DAOFactory.getInstance().createSpecialtyDAO();
Specialty spe=speDao.getSpecialtyByID(spe_name);
this.spe_name = spe.getSpename();
}
public String getStunumber() {
return stunumber;
}
public void setStunumber(String stunumber) {
this.stunumber = stunumber;
}
public Specialty getSpecialty() {
return specialty;
}
public void setSpecialty(Specialty specialty) {
this.specialty = specialty;
}

}



tubage408 2008-04-03
  • 打赏
  • 举报
回复
你生成的Result.java里应该有个Students类型的对象才对呀,同事也该有个Course对象呀

67,537

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧