Hibernate——ORMapping(二)

第八种:多对多单向关联

一、Annotation配置

每个Teacher可以有多个Student,每个Student可以被多个Teacher教

1.Teacher.java

package com.zgy.hibernate.model;

import java.util.HashSet;

import java.util.Set;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.JoinTable;

import javax.persistence.ManyToMany;

import javax.persistence.Table;

@Entity

@Table(name="t_teacher")

public class Teacher {

private int id;

private String name;

private Set<Student> students = new HashSet<Student>();

@Id

@GeneratedValue

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;

}

@ManyToMany

@JoinTable(name="t_s" ,

joinColumns={@JoinColumn(name="teacher_id")},

inverseJoinColumns={@JoinColumn(name="student_id")}

)

public Set<Student> getStudents() {

return students;

}

public void setStudents(Set<Student> students) {

this.students = students;

}

}

2.Student.java

package com.zgy.hibernate.model;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.Table;

@Entity

@Table(name="t_student")

public class Student {

private int id;

private String name;

@Id

@GeneratedValue

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;

}

}

3.测试,观察结果

Hibernate: create table t_s (teacher_id integer not null, student_id integer not null, primary key (teacher_id, student_id))

Hibernate: create table t_student (id integer not null auto_increment, name varchar(255), primary key (id))

Hibernate: create table t_teacher (id integer not null auto_increment, name varchar(255), primary key (id))

Hibernate: alter table t_s add constraint FK_3no0wm9bwtogr87t4gvd4t3x5 foreign key (student_id) references t_student (id)

Hibernate: alter table t_s add constraint FK_pj2fmd6skwfi7jm2avlo4n6mf foreign key (teacher_id) references t_teacher (id)

二、Xml配置

1.Teacher.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.zgy.hibernate.model">

<class name="com.zgy.hibernate.model.Teacher" table="t_teacher">

<id name="id" column="id">

<generator class="native"></generator>

</id>

<property name="name" column="name"></property>

<set name="students" table="t_s">

<key column="teacher_id"></key>

<many-to-many class="com.zgy.hibernate.model.Student" column="student_id"></many-to-many>

</set>

</class>

</hibernate-mapping>

2.Student.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.zgy.hibernate.model">

<class name="com.zgy.hibernate.model.Student" table="t_student">

<id name="id" column="id">

<generator class="native"></generator>

</id>

<property name="name" column="name"></property>

</class>

</hibernate-mapping>

3.观察结果

Hibernate: create table t_s (teacher_id integer not null, student_id integer not null, primary key (teacher_id, student_id))

Hibernate: create table t_student (id integer not null auto_increment, name varchar(255), primary key (id))

Hibernate: create table t_teacher (id integer not null auto_increment, name varchar(255), primary key (id))

Hibernate: alter table t_s add constraint FK_3no0wm9bwtogr87t4gvd4t3x5 foreign key (student_id) references t_student (id)

Hibernate: alter table t_s add constraint FK_pj2fmd6skwfi7jm2avlo4n6mf foreign key (teacher_id) references t_teacher (id)

第九种:多对多双向关联

一、Annotation配置

1.Teacher.java

package com.zgy.hibernate.model;

import java.util.HashSet;

import java.util.Set;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.JoinTable;

import javax.persistence.ManyToMany;

import javax.persistence.Table;

@Entity

@Table(name="t_teacher")

public class Teacher {

private int id;

private String name;

private Set<Student> students = new HashSet<Student>();

@Id

@GeneratedValue

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;

}

@ManyToMany

@JoinTable(name="t_s" ,

joinColumns={@JoinColumn(name="teacher_id")},

inverseJoinColumns={@JoinColumn(name="student_id")}

)

public Set<Student> getStudents() {

return students;

}

public void setStudents(Set<Student> students) {

this.students = students;

}

}

2.Student.java

package com.zgy.hibernate.model;

import java.util.HashSet;

import java.util.Set;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.ManyToMany;

import javax.persistence.Table;

@Entity

@Table(name="t_student")

public class Student {

private int id;

private String name;

private Set<Teacher> teachers = new HashSet<Teacher>();

@Id

@GeneratedValue

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;

}

@ManyToMany(mappedBy="students")

public Set<Teacher> getTeachers() {

return teachers;

}

public void setTeachers(Set<Teacher> teachers) {

this.teachers = teachers;

}

}

3.观察结果:

Hibernate: create table t_s (teacher_id integer not null, student_id integer not null, primary key (teacher_id, student_id))

Hibernate: create table t_student (id integer not null auto_increment, name varchar(255), primary key (id))

Hibernate: create table t_teacher (id integer not null auto_increment, name varchar(255), primary key (id))

Hibernate: alter table t_s add constraint FK_3no0wm9bwtogr87t4gvd4t3x5 foreign key (student_id) references t_student (id)

Hibernate: alter table t_s add constraint FK_pj2fmd6skwfi7jm2avlo4n6mf foreign key (teacher_id) references t_teacher (id)

二、Xml配置

1.Teacher.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.zgy.hibernate.model">

<class name="com.zgy.hibernate.model.Teacher" table="t_teacher">

<id name="id" column="id">

<generator class="native"></generator>

</id>

<property name="name" column="name"></property>

<set name="students" table="t_s">

<key column="teacher_id"></key>

<many-to-many class="com.zgy.hibernate.model.Student" column="student_id"></many-to-many>

</set>

</class>

</hibernate-mapping>、

2.Student.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.zgy.hibernate.model">

<class name="com.zgy.hibernate.model.Student" table="t_student">

<id name="id" column="id">

<generator class="native"></generator>

</id>

<property name="name" column="name"></property>

<set name="teachers" table="t_s">

<key column="student_id"></key>

<many-to-many class="com.zgy.hibernate.model.Teacher" column="teacher_id"></many-to-many>

</set>

</class>

</hibernate-mapping>

3.观察结果

Hibernate: create table t_s (teacher_id integer not null, student_id integer not null, primary key (student_id, teacher_id))

Hibernate: create table t_student (id integer not null auto_increment, name varchar(255), primary key (id))

Hibernate: create table t_teacher (id integer not null auto_increment, name varchar(255), primary key (id))

Hibernate: alter table t_s add constraint FK_3no0wm9bwtogr87t4gvd4t3x5 foreign key (student_id) references t_student (id)

Hibernate: alter table t_s add constraint FK_pj2fmd6skwfi7jm2avlo4n6mf foreign key (teacher_id) references t_teacher (id)

时间: 2024-12-23 16:53:17

Hibernate——ORMapping(二)的相关文章

深入浅出Hibernate(二)多对一关系映射

学习Hibernate是为了更方便的操作数据库,在数据库中的关系模型中存在多对一的关系,比如下图所示的员工和部门之间的关系,那么这种关系在Hibernate中如何映射呢?让我用一个小Demo来详细讲解. 建立映射分为以下几步: 1.设计domain对象Department.Employee,代码如下: package cn.itcast.hibernate.domain; public class Department { private int id; private String name;

Hibernate复习(二)主要对象

1.SessionFactory 一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例. SessionFactory有以下特点: –它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享. –它是重量级的,这意味着不能随意创建或销毁它的实例.如果应用只访问一个数据库,只需要创建一个SessionFactory实例,在应用初始化的时候创建该实 例.如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFac

Hibernate实例二

Hibernate实例二 一.测试openSession方法和getCurrentSession方法 hebernate中可以通过上述两种方法获取session对象以对数据库进行操作,下面的代码以及注解是对两种方法的辨析 SessionTest.java 1 import java.sql.Connection; 2 import java.sql.SQLException; 3 import java.util.Date; 4 5 import org.hibernate.Session; 6

Hibernate——ORMapping

ORMapping 第一种:一对一单向外键关联 一.Annotaion配置 小实验1: (1)编写hunsband.java,属性为id,name,wife.id是主键 (2)编写wife.java,属性为id,name.id是主键 (3)实现方式:在husband.java中,用wife作为外键关联wife.java中的主键id Husband.java package com.zgy.hibernate.model; import javax.persistence.Entity; impo

hibernate(二)annotation第一个示例

一.在数据库中创建teacher表(数据库hibernate) create table teache( id int auto_increment primary key, name varchar(20), title varchar(20) ); 二.创建model 在cn.orlion.hibernate.model下创建实体类Teacher(注意添加注解,一开始只添加了@Id,然后抛出异常,后来又加上了@GeneratedValue(strategy = GenerationType.

Hibernate(十二)Criteria查询

一.简述 Criteria是一种比hql更面向对象的查询方式.Criteria 可使用 Criterion 和 Projection 设置查询条件.可以设置 FetchMode(联合查询抓取的模式 ) ,设置排序方式,Criteria 还可以设置 FlushModel (冲刷 Session 的方式)和 LockMode (数据库锁模式). Criteria本身只是查询的容器.Criteria查询又称对象查询 Criteria查询采用面向对象的方式封装查询条件.由Hibernater自动生成SQ

Hibernate(二)

1. 对象的状态 代码 public class StateTest extends HiberanteUtils{ /** * session.save方法把一个临时状态的对象转化成持久化状态的对象 */ @Test public void testSavePerson(){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Person p

spring mvc+spring + hibernate 整合(二)

在上篇文章中,我建立了工程并配置了spring + hibernate.今天我们检验下上篇文章的成果,如何检查呢?那就是进行单元测试.本篇文章就让大家和我一起来就前面的建的工程进行单元测试.     本项目使用Junit进行单元测试,需要引用单元测试的包,在的工程建立中已有了如何引入单元测试的依赖,这里就不多说了.要进行单元单元测试,我们就按下面的步骤进行 一:建立实体 本例是刚弄开始学习,所以表不弄得太复杂,我们就以用户登录为例:建立一个用户对象,拥有用户名和密码两个属性,密码开始也使用名文的

Hibernate(二)之Hibernate-api详解

一.Hibernate体系结构 二.Hibernate-api详解 2.1.Configuration配置对象 Configuration是用来加载配置文件的 我们Hibernate中主要有两个配置文件,第一个是核心的配置文件,第二个是映射文件. 2.2.SessionFactory工厂 SessionFactory 相当于java web连接池,用于管理所有session 获得方式:config.buildSessionFactory(); sessionFactory hibernate缓存