Hibernate三种实体映射,从建表到操作代码
来源:互联网 发布:2200万淘宝买家资料 编辑:程序博客网 时间:2024/06/01 22:44
映射关联大致分为三种 :
一对一 ,一对多, 多对多
一.一对一
drop table if exists husband;create table husband( id int not null primary key , hname varchar(20) not null collate 'utf8_bin');drop table if exists wife;create table wife( id int not null primary key , wname varchar(20) not null collate 'utf8_bin', constraint h_w_id foreign key(id)references husband(id))
package com.lyf.dao;import com.lyf.po.Hus;import com.lyf.po.Wif;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;/** * Created by fangjiejie on 2017/4/16. */public class HusDao implements IHusDao{ private Configuration cfg=null; private SessionFactory sf=null; public HusDao() { cfg=new Configuration().configure("hibernate.cfg.xml"); sf=cfg.buildSessionFactory(); }@Test public void add() { Session session=null; Transaction tran=null; try { session=sf.openSession(); tran=session.getTransaction(); tran.begin(); Hus hus=new Hus(); hus.setId(3); hus.sethName("hus2"); Wif wif=new Wif(); wif.setId(3); wif.setwName("wif2"); wif.setHus(hus); hus.setWif(wif); session.save(hus); tran.commit(); } catch (HibernateException e) { tran.rollback(); e.printStackTrace(); } finally { session.close(); } }@Test public void delete() { Session session=sf.openSession(); Transaction tran=session.getTransaction(); tran.begin(); Hus h=session.load(Hus.class,3); session.delete(h); tran.commit(); session.close(); }@Test public void update() { Session session=sf.openSession(); Transaction tran=session.getTransaction(); tran.begin(); Hus h=session.load(Hus.class,1); h.sethName("hus0"); h.getWif().setwName("wif0"); session.update(h); tran.commit(); session.close(); }@Test public void query() { Session session=sf.openSession(); Hus h=session.load(Hus.class,1); System.out.printf("Hus:%s Wife:%s",h.gethName(),h.getWif().getwName()); session.close(); }}
想要实现对主表操作,从表也跟着操作 可以设置hus实体
@OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "id", referencedColumnName = "id", nullable = false) public Wif getWif() { return wif; } public void setWif(Wif wif) { this.wif = wif; }}
二.一对多
drop table if exists father;create table father( fid int not null primary key , fname varchar(20) not null collate 'utf8_bin');drop table if exists son;create table son( sid int not null primary key , sname varchar(20) not null collate 'utf8_bin', fid int not null, constraint f_s_id foreign key(fid)references father(fid))
package com.lyf.dao;import com.lyf.po.Father;import com.lyf.po.Son;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;import java.util.Iterator;import java.util.Set;/** * Created by fangjiejie on 2017/4/17. */public class FaterDal implements IFather{ private Configuration cfg=null; private SessionFactory sf=null; public FaterDal() { cfg=new Configuration().configure("hibernate.cfg.xml"); sf=cfg.buildSessionFactory(); }@Test public void add() { Session session=sf.openSession(); Transaction tran=session.getTransaction(); tran.begin(); Father f1=new Father(); f1.setfId(7); f1.setfName("f7"); Son s1=new Son(); s1.setsId(5); s1.setsName("s5"); s1.setFather(f1); Son s2=new Son(); s2.setsId(6); s2.setsName("s6"); s2.setFather(f1); f1.getSons().add(s1); f1.getSons().add(s2); session.save(f1); tran.commit(); session.close(); }@Test public void delete() { Session session=sf.openSession(); Transaction tran=session.getTransaction(); tran.begin(); Father f=session.load(Father.class,7); session.delete(f); tran.commit(); session.close(); } public void update() { }@Test public void query() { Session session=sf.openSession(); Father f=session.load(Father.class,7); Set<Son> sons=f.getSons(); Iterator<Son> it=sons.iterator(); while(it.hasNext()){ Son son=it.next(); System.out.println(son.getsName()); } session.close(); }}
实现主表操作,连动从表,设置father实体类中
@OneToMany(mappedBy = "father",cascade = CascadeType.ALL) public Set<Son> getSons() { return sons; } public void setSons(Set<Son> sons) { this.sons = sons;
三.多对多
drop table if exists teacher;create table teacher( tid int not null primary key , tname varchar(20) not null collate 'utf8_bin');drop table if exists student;create table student( sid int not null primary key , sname varchar(20) not null collate 'utf8_bin');create table teacherstudent( tid int not null, sid int not null, primary key(tid,sid), constraint t_s_1 foreign key(tid) references teacher(tid), constraint t_s_2 foreign key(sid) references student(sid))
package com.lyf.dao;import com.lyf.po.Students;import com.lyf.po.Teachers;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;/** * Created by fangjiejie on 2017/4/17. */public class StudentsDao implements IStudentsDao { private Configuration cfg=null; private SessionFactory sf=null; public StudentsDao() { cfg=new Configuration().configure("hibernate.cfg.xml"); sf=cfg.buildSessionFactory(); }@Test public void add() { Session session=sf.openSession(); Transaction tran=session.getTransaction(); tran.begin(); Teachers tea1=new Teachers(); tea1.settId(1); tea1.settName("t1"); Teachers tea2=new Teachers(); tea2.settId(2); tea2.settName("t2"); Students stu1=new Students(); stu1.setsId(1); stu1.setsName("s1"); Students stu2=new Students(); stu2.setsId(2); stu2.setsName("s2"); tea1.getStudents().add(stu1); tea1.getStudents().add(stu2); tea2.getStudents().add(stu1); tea2.getStudents().add(stu2); stu1.getTeachers().add(tea1); stu1.getTeachers().add(tea2); stu2.getTeachers().add(tea1); stu2.getTeachers().add(tea2); session.save(stu1); session.save(stu2); tran.commit(); session.close(); }@Test public void delete() { Session session=sf.openSession(); Transaction tran=session.getTransaction(); tran.begin(); Students s=session.load(Students.class,1); session.delete(s); tran.commit(); session.close(); } public void update() { } public void query() { }}
值得注意的是,如果在删除主表数据时,我们并不想,让从表数据一起删除。我们可以设置主表
@ManyToMany(cascade = CascadeType.PERSIST)//增加连动,删除不联动 @JoinTable(name = "teastu", catalog = "bz", schema = "bz", joinColumns = @JoinColumn(name = "s_id", referencedColumnName = "s_id", nullable = false), inverseJoinColumns = @JoinColumn(name = "t_id", referencedColumnName = "t_id", nullable = false)) public Set<Teachers> getTeachers() { return teachers; }
0 0
- Hibernate三种实体映射,从建表到操作代码
- 【Hibernate】从入门到精通(三)映射实体类
- Hibernate之jpa实体映射的三种继承关系
- Hibernate之jpa实体映射的三种继承关系
- hibernate 映射实体类并操作数据库!
- Hibernate两种实体关系映射详解
- hibernate实体映射
- Hibernate实体映射浅谈
- Hibernate实体映射浅谈
- Hibernate实体映射浅谈
- Hibernate实体映射
- hibernate search 实体映射
- Hibernate实体映射
- hibernate实体映射
- hibernate实体类映射
- hibernate 实体映射
- Hibernate实体映射
- Hibernate实体映射模板
- linux基础3.9apache
- 重建二叉树
- F
- 利用eclipse打开github项目
- IPython 下的信息收集-魔力函数(page pinfo who等)- 千月的python linux 系统管理指南学习笔记(9)
- Hibernate三种实体映射,从建表到操作代码
- 设计模式-组合模式
- KVO实现自定义文件复制进度展示
- LeetCode 147 Insertion Sort List(链表)
- 16国赛1题
- Md5实现算法源码
- 基于DEM提取经纬度
- Leetcode-标签为Tree 111. Minimum Depth of Binary Tree
- Maven tomcat7-maven-plugin 部署Maven Web 项目