hibernate annotation 之 一对一单向外键关联(二)

2014-11-24 09:46:34 · 作者: · 浏览: 2
= id;

}


public void setDate(Date date) {

this.date = date;

}


}

hibernate.cfg.xml 清单



com.mysql.jdbc.Driver

jdbc:mysql://localhost:3306/temp

username

password


org.hibernate.dialect.MySQLDialect


thread


true

true






Junit Test

package junit.test;


import java.util.Date;

import net.yeah.fancydeepin.unidirectional.po.Student;

import net.yeah.fancydeepin.unidirectional.po.StudentCard;

import org.hibernate.Session;

import org.hibernate.cfg.AnnotationConfiguration;

import org.hibernate.tool.hbm2ddl.SchemaExport;

import org.junit.BeforeClass;

import org.junit.Test;


public class TestApp {


private static Session session;

private static final String ID = "402881f13a5480c2013a5480c3d00001";


@BeforeClass

public static void beforeClass(){

session = new AnnotationConfiguration().configure().buildSessionFactory().getCurrentSession();

}


@Test

public void createTable(){

new SchemaExport(new AnnotationConfiguration().configure()).create(true, true);

}


@Test

public void insert(){

Student student = new Student();

student.setName("fancy");

StudentCard studentCard = new StudentCard();

studentCard.setId(3110005981L);

studentCard.setDate(new Date());

student.setStudentCard(studentCard);

session.beginTransaction();

session.save(student);

session.getTransaction().commit();

}


@Test

public void query(){

session.beginTransaction();

Student student = (Student)session.get(Student.class, ID);

System.out.println(student.getName());


//StudentCard studentCard = student.getStudentCard();

//System.out.println(studentCard.getDate());

}


@Test

public void update(){

session.beginTransaction();

Student student = (Student)session.get(Student.class, ID);

student.setName("fancydeepin");

// StudentCard studentCard = student.getStudentCard();

// studentCard.setDate(new Date());

// student.setStudentCard(studentCard);

session.update(student);

session.getTransaction().commit();

}


@Test

public void delete(){

session.beginTransaction();

Student student = (Student)session.get(Student.class, ID);

// StudentCard studentCard = student.getStudentCard();

// session.delete(studentCard);

session.delete(student);

session.getTransaction().commit();

}


}

1. 建表

在 Junit 测试类中执行建表方法 createTable,数据库中生成表结构 :


2. 插入数据 ( 级联插入 )

在 Junit 测试类中执行 insert 方法,后台发出两条插入的 SQL 语句,数据库中产生的数据 :

在这里,student 是主表,studentcard 是从表,Student 类级联 ( CascadeType.ALL ) 了 StudentCard 类,当 Student 的实例对象被持久化时,

若 Student 对象的 StudentCard 实例对象不为 null,则该 StudentCard 对象也将被持久化到数据库,若为 null,则不会被持久化。

3. 查询数据 ( 延迟加载 )

在 Junit 测试类中执行 query 方法,后台发出 Student 的 select SQL 语句 :

Hibernate:
select
student0_.id as id0_0_,
student0_.name as name0_0_,
student0_.studentCard_id as studentC3_0_0_
from
Student student0_
where
stude