- --班级表
- create table grade
- (
- gid number primary key, --班级ID
- gname varchar2(50), --班级名称
- gdesc varchar2(50) --班级介绍
- );
- --学生表
- create table student
- (
- sid number primary key, --主键ID学生ID
- sname varchar2(20), --学生姓名
- sex varchar2(20), --学生性别
- gid number references grade(gid) ---外键班级ID
- );
- --学生证表
- create table paper
- (
- pid number primary key,
- pdesc varchar2(100) ,
- sid number references student(sid) not null
- );
学生类
- package entity;
- /*
- * 学生类
- */
- public class Student implements java.io.Serializable {
- // Fields
- private static final long serialVersionUID = 1L;
- private int sid;
- private String sname;
- private String sex;
- //增加班级属性
- private Grade grade;
- //学生证类
- private Paper paper;
- // Constructors
- /** default constructor */
- public Student() {
- }
- /** minimal constructor */
- public Student(int sid) {
- this.sid = sid;
- }
- /** full constructor */
- public Student(int sid, String sname, String sex ) {
- this.sid = sid;
- this.sname = sname;
- this.sex = sex;
- }
- // Property accessors
- public int getSid() {
- return this.sid;
- }
- public void setSid(int sid) {
- this.sid = sid;
- }
- public String getSname() {
- return this.sname;
- }
- public void setSname(String sname) {
- this.sname = sname;
- }
- public String getSex() {
- return this.sex;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- public Grade getGrade() {
- return grade;
- }
- public void setGrade(Grade grade) {
- this.grade = grade;
- }
- public Paper getPaper() {
- return paper;
- }
- public void setPaper(Paper paper) {
- this.paper = paper;
- }
- }
学生证类
- package entity;
- /*
- * 学生证类
- */
- public class Paper implements java.io.Serializable {
- // Fields
- private static final long serialVersionUID = 1L;
- private int pid;
- private Student student;
- private String pdesc;
- // Constructors
- /** default constructor */
- public Paper() {
- }
- /** minimal constructor */
- public Paper(int pid) {
- this.pid = pid;
- }
- /** full constructor */
- public Paper(int pid, Student student, String pdesc) {
- this.pid = pid;
- this.student = student;
- this.pdesc = pdesc;
- }
- // Property accessors
- public int getPid() {
- return this.pid;
- }
- public void setPid(int pid) {
- this.pid = pid;
- }
- public Student getStudent() {
- return this.student;
- }
- public void setStudent(Student student) {
- this.student = student;
- }
- public String getPdesc() {
- return this.pdesc;
- }
- public void setPdesc(String pdesc) {
- this.pdesc = pdesc;
- }
- }
hibernate.cfg.xml配置文件
- <?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>
- <property name="dialect">
- org.hibernate.dialect.Oracle9Dialect
- </property>
- <property name="connection.url">
- jdbc:oracle:thin:@localhost:1521:orcl
- </property>
- <property name="connection.username">root</property>
- <property name="connection.password">root</property>
- <property name="connection.driver_class">
- oracle.jdbc.OracleDriver
- </property>
- <property name="show_sql">true</property>
- <property name="format_sql">true</property>
- <mapping resource="entity/Grade.hbm.xml" />
- <mapping resource="entity/Student.hbm.xml" />
- <mapping resource="entity/Paper.hbm.xml" />
- </session-factory>
- </hibernate-configuration>
学生类配置文件
- <?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="entity.Student" table="STUDENT" schema="ROOT">
- <id name="sid" type="java.lang.Integer">
- <column name="SID" precision="22" scale="0" />
- <generator class="assigned" />
- </id>
- <property name="sname" type="java.lang.String">
- <column name="SNAME" length="20" />
- </property>
- <property name="sex" type="java.lang.String">
- <column name="SEX" length="20" />
- </property>
- <!--配置grade属性 -->
- <many-to-one name="grade" class="entity.Grade" cascade="save-update">
- <!--指定学生表中的外键 -->
- <column name="GID" />
- </many-to-one>
- <!-- 添加学生证的配置 -->
- <one-to-one name="paper" class="entity.Paper" cascade="all" lazy="false"/>
- </class>
- </hibernate-mapping>
学生证类配置文件
- <?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 Persistence Tools
- -->
- <hibernate-mapping>
- <class name="entity.Paper" table="PAPER" schema="ROOT">
- <id name="pid" type="java.lang.Integer">
- <column name="PID" precision="22" scale="0" />
- <generator class="assigned" />
- </id>
- <property name="pdesc" type="java.lang.String">
- <column name="PDESC" length="100" />
- </property>
- <!-- 学生信息 unique唯一的-->
- <many-to-one name="student" class="entity.Student" unique="true" lazy="false">
- <column name="SID" precision="22" scale="0" />
- </many-to-one>
- </class>
- </hibernate-mapping>
测试类
- package Test;
- import org.hibernate.Session;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- import entity.Paper;
- import entity.Student;
- public class Demo6 {
- public static void main(String[] args) {
- save();
- find();
- }
- public static void save() {
- Student stu1 = new Student();
- stu1.setSid(20151109);
- stu1.setSname("钱七");
- stu1.setSex("女");
- Paper paper=new Paper();
- paper.setPid(9001);
- paper.setPdesc("钱七的学生证");
- paper.setStudent(stu1);
- stu1.setPaper(paper);
- // 建立session
- Session session = new Configuration().configure().buildSessionFactory()
- .openSession();
- // 开始事务
- Transaction transaction = session.beginTransaction();
- // 保存学生证
- session.save(stu1);
- // 提交事务
- transaction.commit();
- // 关闭session
- session.close();
- }
- public static void find() {
- // 建立session
- Session session = new Configuration().configure().buildSessionFactory()
- .openSession();
- Paper paper=(Paper) session.get(Paper.class, 9001);
- System.out.println(paper.getPid()+paper.getPdesc());
- Student stu1=paper.getStudent();
- System.out.println(stu1.getSid()+"\t"+stu1.getSname());
- }
- }
发现可以 通过学生证,找到学生
但反过来,如果通过学生,找到学生证呢,显示是不能的,因为学生类中配置文件没有实现关联
修改学生类的配置文件 property-ref="student"用来指定Paper类中的属性
- <?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="entity.Student" table="STUDENT" schema="ROOT">
- <id name="sid" type="java.lang.Integer">
- <column name="SID" precision="22" scale="0" />
- <generator class="assigned" />
- </id>
- <property name="sname" type="java.lang.String">
- <column name="SNAME" length="20" />
- </property>
- <property name="sex" type="java.lang.String">
- <column name="SEX" length="20" />
- </property>
- <!--配置grade属性 -->
- <many-to-one name="grade" class="entity.Grade" cascade="save-update">
- <!--指定学生表中的外键 -->
- <column name="GID" />
- </many-to-one>
- <!-- 添加学生证的配置 -->
- <one-to-one name="paper" class="entity.Paper" cascade="all" lazy="false" property-ref="student"/>
- </class>
- </hibernate-mapping>
测试类
- package Test;
- import org.hibernate.Session;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- import entity.Paper;
- import entity.Student;
- public class Demo6 {
- public static void main(String[] args) {
- findByStu();
- }
- public static void save() {
- Student stu1 = new Student();
- stu1.setSid(20151109);
- stu1.setSname("钱七");
- stu1.setSex("女");
- Paper paper=new Paper();
- paper.setPid(9001);
- paper.setPdesc("钱七的学生证");
- paper.setStudent(stu1);
- stu1.setPaper(paper);
- // 建立session
- Session session = new Configuration().configure().buildSessionFactory()
- .openSession();
- // 开始事务
- Transaction transaction = session.beginTransaction();
- // 保存学生证
- session.save(stu1);
- // 提交事务
- transaction.commit();
- // 关闭session
- session.close();
- }
- public static void find() {
- // 建立session
- Session session = new Configuration().configure().buildSessionFactory()
- .openSession();
- Paper paper=(Paper) session.get(Paper.class, 9001);
- System.out.println(paper.getPid()+paper.getPdesc());
- Student stu1=paper.getStudent();
- System.out.println(stu1.getSid()+"\t"+stu1.getSname());
- }
- public static void findByStu() {
- // 建立session
- Session session = new Configuration().configure().buildSessionFactory()
- .openSession();
- Student stu=(Student) session.get(Student.class, 20151109);
- System.out.println(stu.getSname());
- Paper paper=stu.getPaper();
- System.out.println(paper.getPid()+"\t"+paper.getPdesc());
- }
- }