Hibernate中一对一实体关系的主键关联问题

小弟在利用Hibernate进行一对一关系操作时,利用的主键关联.遇到了下面的问题,现将问题描述如下:
在MySQL的quickstart数据库中有两个表,t_student和t_card。
t_student的构建语句如下:

create table t_student(id int primary key,name varchar(20),card_id varchar(20),sex varchar(20),
age int));

t_card的结构如下:
create table t_card(id int primary key,name varchar(20));
通过Hibernate的一对一实体关系的主键关联来操作实体Student和Card
Student.java的代码如下:
package register;
import register.Card;
public class Student{
private int id;
private String name;
private String card_id;
private String sex;
private int age;
private Card card;
public Student(){
}
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public String getCard_id(){
  return card_id;
}
public void setCard_id(String card_id){
  this.card_id=card_id;
}
public String getSex(){
  return sex;
}
public void setSex(String sex){
  this.sex=sex;
}
public int getAge(){
  return age;
}
public void setAge(int age){
  this.age=age;
}
public Card getCard(){
  return card;
}
public void setCard(Card card){
  this.card=card;
}
}
Card.java的代码如下:
package register;
import register.Student;
public class Card{
private int id;
private String name;
private Student stu;
public Card(){
}
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public Student getStudent(){
return stu;
}
public void setStudent(Student stu){
this.stu=stu;
}
}

Hibernate的配置文件如下:
<!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>   
        <property name="connection.datasource">java:comp/env/jdbc/quickstart</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">false</property>
        <!-- Mapping files -->
        <mapping resource="register.hbm.xml"/>
<mapping resource="Student.hbm.xml"/>
<mapping resource="Card.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

Student.hbm.xml如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="register.Student" table="t_student">
   <id name="id" column="id" type="int">
     <generator class="increment"/>
   </id>
  <property name="name" column="name" type="string"/>
  <property name="card_id" column="card_id" type="string"/>
  <property name="sex" column="sex" type="string"/>
  <property name="age" column="age" type="int"/>
  <one-to-one name="card" class="register.Card" cascade="all"/>
</class>
</hibernate-mapping>

Card.hbm.xml如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="register.Card" table="t_card">
   <id name="id" column="id" type="int">
<generator class="foreign">
     <param name="property">stu</param>
    </generator>
   </id>
  <property name="name" column="name" type="string"/>
  <one-to-one name="stu" class="register.Student" constrained="true"/>
</class>
</hibernate-mapping>
测试的JSP页面如下:
OneToOneRelation.jsp
<%@ page language="java" pageEncoding="GB2312" %>
<%@ page import="org.hibernate.Transaction"%>
<%@ page import="org.hibernate.Session"%>
<%@ page import="org.hibernate.cfg.*"%>
<%@ page import="org.hibernate.Query"%>
<%@ page import="org.hibernate.HibernateException"%>
<%@ page import="register.*"%>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head><title></title></head>
<body bgcolor="#FFFFFF">
<%
  Student stu=new Student();
  stu.setName("Bill");
  stu.setCard_id("2004001");
  stu.setSex("male");
  stu.setAge(22);
 
  Card card=new Card();
  card.setName("Bill");
 
  stu.setCard(card);
  card.setStudent(stu);
 
  try{
  Session ses=HibernateUtil.currentSession();
  Transaction ts=ses.beginTransaction();
  ses.save(stu);
  ts.commit();
  HibernateUtil.closeSession();
  }
  catch(Exception excep){
  excep.printStackTrace();
  out.println("wrong");
  //throw excep;
}
%>
</body>
</html>

Tomcat的报错是:
Java.lang.NoClassDefFoundError

我的Tomcat,MySQL和Hibernate的配置都没问题,能正常运行。
出现此问题,小弟自己猜测是否是Student.hbm.xml和Card.hbm.xml的问题,或者是Student.java和Card.java问题。我的Hibernate版本是3.1。

你可能感兴趣的:(tomcat,Hibernate,xml,mysql,jsp)