整理笔记---Hiberante对象关系
来源:互联网 发布:sql insert 单引号 编辑:程序博客网 时间:2024/06/06 20:38
Hibernate的关系映射:
【many-to-one单向关联】
例子:班级跟学生之间的关系
【创建ClassRoom对象实例类】
package com.xing.entity;/** * 一对多(一的一方) * Created by Administrator on 2016/8/2. */public class ClassRoom { private int id; private String name ; private int grade; 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 int getGrade() { return grade; } public void setGrade(int grade) { this.grade = grade; }}
【创建Student对象实例类】
package com.xing.entity;/** * 一对多(多的一方) * Created by Administrator on 2016/8/2. */public class Student { private int id ; private String name ; private String no ; //多对一的单项关联 private ClassRoom classRoom ; 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 getNo() { return no; } public void setNo(String no) { this.no = no; } public ClassRoom getClassRoom() { return classRoom; } public void setClassRoom(ClassRoom classRoom) { this.classRoom = classRoom; }}
【配置ClassRoom.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"><!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 --><hibernate-mapping package="com.xing.entity"> <class name="ClassRoom" table="t_class_room" > <id name="id"> <generator class="native"/> </id> <property name="name"/> <property name="grade"/> </class></hibernate-mapping>
【配置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"><!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 --><hibernate-mapping package="com.xing.entity"> <class name="Student" table="t_student" > <id name="id"> <generator class="native"/> </id> <property name="name"/> <property name="no"/> <!-- 多的一方映射一的一方 many-to-one用来映射多对一关系,name设置对象中的属性名称,column设置当前表示多的表中的外键的名称 --> <many-to-one name="classRoom" column="t_class_id"></many-to-one> </class></hibernate-mapping>
【junit测试one-to-many】
import com.xing.entity.ClassRoom;import com.xing.entity.Student;import com.xing.util.HibernateUtil;import org.hibernate.Session;import org.junit.Test;/** * Created by Administrator on 2016/8/2. */public class TestHiernateRelationShip { @Test public void testHibernateOneToMany(){ Session session = null ; try { session = HibernateUtil.openSession() ; //打开事务 session.beginTransaction() ; ClassRoom classRoom = new ClassRoom() ; classRoom.setGrade(2016); classRoom.setName("微积分"); session.save(classRoom) ; Student student = new Student() ; student.setName("韦德"); student.setNo("003"); student.setClassRoom(classRoom); session.save(student) ; Student student2 = new Student() ; student2.setName("库里"); student2.setNo("004"); student2.setClassRoom(classRoom); session.save(student2) ; //提交事务 session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); } finally { HibernateUtil.closeSession(session); } }}
cascade:表示级联。
设置级联后会自动完成关联,如果没有关联会自动创建关联对象。(没有特殊情况不建议使用级联,建立级联时不建议在表示多的一方建立)
cascade:的值有add,delete……all。
【one-to-many单向关联】
例子:帖子和评论
【帖子类】
package com.xing.entity;import java.util.HashSet;import java.util.Set;/** * one-to-many (单向) * Created by Administrator on 2016/8/2. */public class Message { private int id ; private String title; private String content; private Set<Comment> comments ; public Message() { //在构造方法中初始化 comments = new HashSet<Comment>() ; } public void addComments(Comment comment){ comments.add(comment) ; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Set<Comment> getComments() { return comments; } public void setComments(Set<Comment> comments) { this.comments = comments; }}
【评论类】
package com.xing.entity;/** * one-to-many (单向) * Created by Administrator on 2016/8/2. */public class Comment { private int id ; private String content ; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getContent() { return content; } public void setContent(String content) { this.content = content; }}
【帖子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"><!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 --><hibernate-mapping package="com.xing.entity"> <class name="Message" table="t_message" > <id name="id"> <generator class="native"/> </id> <property name="title"/> <property name="content"/> <!-- set集合存储一组数据用来设置one-to-many name指的是属性名称,,,key指的是当前对象在对方的外键名称--> <set name="comments"> <key column="mid"></key> <one-to-many class="Comment"></one-to-many> </set> </class></hibernate-mapping>
【评论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"><!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 --><hibernate-mapping package="com.xing.entity"> <class name="Comment" table="t_comment" > <id name="id"> <generator class="native"/> </id> <property name="content"/> </class></hibernate-mapping>
oneTomany双向关联
例子:学生类和班级类
配置:
(1)之前的ClassRoom类中添加如下代码
private Set<Student> stus ; public Set<Student> getStus() { return stus; } public void setStus(Set<Student> stus) { this.stus = stus; }
(2)ClassRoom.hbm.xml中添加如下代码:
<set name="stus" lazy="extra"> <key column="t_class_id"></key> <one-to-many class="Student"></one-to-many> </set>
建议:不要使用一的一方来维护关系,可以在一的一方也就是上面例子中的ClassRoom.hbm.xml文件中set标签做如下代码的修改“inverse=true”
<set name="stus" lazy="extra" inverse="true"> <key column="t_class_id"></key> <one-to-many class="Student"></one-to-many> </set>
one-to-one
外键在那一方说明那一方是用来维护关系的
例子:人和身份证
Person.java
package com.xing.entity;/** * Created by Administrator on 2016/8/2. */public class Person { private int id ; private String name ; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; }}
Card.java(这里设置Card类来维护关系,所以将外键对象 设置在该类中)
package com.xing.entity;/** * Created by Administrator on 2016/8/2. */public class Card { private int id; private String no ; private Person person ; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNo() { return no; } public void setNo(String no) { this.no = no; } public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; }}
Person.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"><!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 --><hibernate-mapping package="com.xing.entity"> <class name="Person" table="t_person" > <id name="id"> <generator class="native"/> </id> <property name="name"></property> </class></hibernate-mapping>
Card.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"><!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 --><hibernate-mapping package="com.xing.entity"> <class name="Card" table="t_card" > <id name="id"> <generator class="native"/> </id> <property name="no"/> <many-to-one name="person" column="pid" unique="true"/> </class></hibernate-mapping>
一对一任意找一方用来做维护关系的一方,在映射文件中用many-to-one把外键加进来,并且用unique来设置唯一性,unique=true说明他们的关系是一对一的,一个Card对象只能对应一个Person对象
many-to-many
Admin.java
package com.xing.entity;import java.util.Set;/** * Created by Administrator on 2016/8/2. */public class Admin { private int id; private String name; private Set<Role> roles ; 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 Set<Role> getRoles() { return roles; } public void setRoles(Set<Role> roles) { this.roles = roles; }}
Role.java
package com.xing.entity;import java.util.Set;/** * Created by Administrator on 2016/8/2. */public class Role { private int id; private String name ; private Set<Admin> admins ; 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 Set<Admin> getAdmins() { return admins; } public void setAdmins(Set<Admin> admins) { this.admins = admins; }}
Admin.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"><!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 --><hibernate-mapping package="com.xing.entity"> <class name="Admin" table="t_admin" > <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="roles" table="t_admin_role" lazy="extra"> <key column="aid"> </key> <many-to-many /> </set> </class></hibernate-mapping>
Role.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"><!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 --><hibernate-mapping package="com.xing.entity"> <class name="Role" table="t_role" > <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="admins" table="t_admin_role" lazy="extra"> <key column="rid"></key> <many-to-many class="Admin" column="aid" /> </set> </class></hibernate-mapping>
hbm.xml文件中的table对应的是他们中间的中间表,many-to-many那个维护关系都可以。
- 整理笔记---Hiberante对象关系
- hiberante学习笔记4(对象的持久化状态)
- Hiberante的对象继承关系之--TPC一张表表示整个继承关系
- Hiberante对象关联映射
- hiberante学习笔记
- Hiberante学习笔记-缓存
- Hiberante的对象继承关系之--TPC每一个具体类一张数据表
- Hiberante的对象继承关系之--TPC一个类一张表
- Hiberante学习笔记:检索策略
- hiberante学习笔记(一)
- hiberante
- 对象流笔记整理
- Java笔记整理:对象
- 面向对象笔记整理
- Java 大对象类型的 Hiberante 映射
- 面向对象(笔记整理)
- Java笔记整理:一切都是对象
- Java笔记整理:持有对象
- c,c++中时间戳与标准时间间的相互转换
- jsp标准标签库
- JAVA动态代理用法与实现过程
- 纯css实现触发选择器
- 进程间通信笔记(1)—简介
- 整理笔记---Hiberante对象关系
- poj 3259 Bellman-ford + SPFA
- 自定义开关按钮
- JAVA单例MongoDB工具类
- Codeforces 702 B. Powers of Two(二分)
- chrome 调试anroid
- python中super()出现的TypeError: must be type, not classobj
- Light OJ 1094 Farthest Nodes in a Tree (树的直径)
- checkbox控件应用