hibernate关联关系
hibernate是一个强大的ORM框架,为了使用面向对象的方式管理数据库,hibernate提供了4中关系设置:
1.一对一 (one-to-one)
2.一对多 (one-to-many)
3.多对一 (many-to-one)
4.多对多 (many-to-many)
5最常用的关系是一对多和多对一
6.实现方式:
一对多:在"一方"定义“多方”的集合(set集合)
多对一: 在“多方”定义“一方”的引用(对象属性),多对一和数据库中的关系类似。
多对多:同时在双方设置对方集合
7.双向和单向:单向就是只在一方建立关系,缺点是只能通过一方找到另一方,而无法通过另一方找到一方。双向是在两端都建立关系,这样比较灵活
使用了hibernatr的关联之后,就可以很方便的使用hibernate多表操作
package model; import java.io.Serializable; //多对一
//学生表 n : 1班级表
//在多的一方定义一方引用
public class Student implements Serializable {
private int sid;
private String sname;
private String sex;
private int gid;//班级外键 //一方的引用
private Grade grade; public Student(){ } public Student(int sid) {
super();
this.sid = sid;
} public int getGid() {
return this.getGrade().getGid();
} public void setGid(int gid) {
this.gid = gid;
} public Grade getGrade() {
return grade;
} public void setGrade(Grade grade) {
this.grade = grade;
} public Student(String sname, String sex) {
super();
this.sname = sname;
this.sex = sex;
} public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
} }
//实体类建立好之后,可以通过hibernate插件自动生成关系
<!-- 单向多对一配置,在多方关联一方外键 -->
<many-to-one name="grade" class="model.Grade" access="field" fetch="join">
<column name="gid" />
</many-to-one>
//班级表
package model; import java.io.Serializable;
import java.util.Set; public class Grade implements Serializable{
private int gid;
private String gname;
private String gdesc; private Set<Student> student; //定义学生集合,一对多,在一方定义多方集合 public Set<Student> getStudent() {
return student;
} public void setStudent(Set<Student> student) {
this.student = student;
} public Grade(){ } public Grade(int gid, String gname, String gdesc) {
super();
this.gid = gid;
this.gname = gname;
this.gdesc = gdesc;
} public Grade(int gid) {
super();
this.gid = gid;
} public Grade(String gname, String gdesc) {
super();
this.gname = gname;
this.gdesc = gdesc;
} public int getGid() {
return gid;
} public void setGid(int gid) {
this.gid = gid;
} public String getGname() {
return gname;
} public void setGname(String gname) {
this.gname = gname;
} public String getGdesc() {
return gdesc;
} public void setGdesc(String gdesc) {
this.gdesc = gdesc;
} }
//班级表关系配置
<!-- 配置一对多关系,设置多方集合 -->
<set name="student" inverse="true" cascade="all">
<key column="gid"></key>
<one-to-many class="model.Student"/>
</set>
//测试类
package test; import java.util.Set; import org.hibernate.Session;
import org.hibernate.Transaction; import util.HibernateUtil;
import model.Grade;
import model.Student; public class Test {
public static void main(String[] args) {
// save();
// findGradeByStudent(1);
findStudentByGrade(1);
} //保存,比较鸡肋,主要用于关联查询,删除等
public static void save(){
Grade grade = new Grade(1);
Student student2 = new Student("廖海2", "男"); //设置多对一关联关系(外键)
student2.setGrade(grade); //执行操作
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();//开启事务
session.save(student2);
System.out.println("save is ok!");
tx.commit(); //事务落地
HibernateUtil.closeSession();//关闭连接 } //根据学生id查询出学生所在班级信息
public static void findGradeByStudent(int sid){
//执行操作
Session session = HibernateUtil.getSession();
//查询学生
Student student1 = (Student) session.get(Student.class, new Integer(sid)); //使用Integer封装,类才能序列化,变量不能序列化
System.out.println(student1.getSname());
//输出班级信息
System.out.println(student1.getSid() + student1.getGrade().getGname() + student1.getGrade().getGdesc());
//关闭连接
HibernateUtil.closeSession();
} //根据学生班级id,查询出班级中所有学生的信息
public static void findStudentByGrade(int gid){
Session session = HibernateUtil.getSession();
//查询班级
Grade grade = (Grade) session.get(Grade.class, gid);
//查询班级中的学生集合
Set<Student> studentSet = grade.getStudent();
for(Student student : studentSet){
System.out.println("班级id:" + student.getGid());
System.out.println("学生id:" + student.getSid());
System.out.println("学生姓名:" + student.getSname());
System.out.println("学生性别:" + student.getSex());
System.out.println("=============================");
} } }
//设置好关系之后,运行hibernate,hibernate会自动帮我们在数据库中为表关联外键。

hibernate关联关系的更多相关文章
- hibernate关联关系笔记
Hibernate关联关系笔记 单向N:1 * 有连接表:在N方使用<join>/<many-to-one>.1方无需配置与之关联的持久化类. * 没有连接表:在N方使用& ...
- Hibernate关联关系映射
1. Hibernate关联关系映射 1.1. one to one <class name="Person"> <id name="id" ...
- hibernate关联关系的crud2
hibernate关联关系的CRUD操作,解释都在注释里了,讲了fetchType.cascade. User类: package com.oracle.hibernate; import javax ...
- Hibernate 关联关系(一对多)
Hibernate 关联关系(一对多) 1. 什么是关联(association) 1.1 关联指的是类之间的引用关系.如果类A与类B关联,那么被引用的类B将被定义为类A的属性.例如: class B ...
- Hibernate关联关系配置(一对多、一对一和多对多)
第一种关联关系:一对多(多对一) "一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系. 一对多:从消费者角的度来说一个消费者可以有多个订单,即为一对多. 多对一:从订单的 ...
- Hibernate关联关系之双向1—n
•双向 1-n 与双向 n-1 是完全相同的两种情形 •双向 1-n 需要在1的一端可以访问n的一端,反之依然. 测试实例代码: 实体类: package com.elgin.hibernate.nt ...
- Hibernate关联关系之——单向n-1
1 .单向 n-1 关联只需从n的一端可以访问1的一端 2.域模型: 从Order到Customer的多对一单向关联需要在Order类中定义一个Customer属性,而在Customer类中无需定义存 ...
- hibernate关联关系映射详解
词汇解释 关系:事物之间相互作用.相互联系的状态.范围最大. 联系:在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 关联:表示对象之间的关系,既有数量性,又有方向性:动词:将对象之间 ...
- hibernate关联关系映射之配置文件
词汇解释 关系:事物之间相互作用.相互联系的状态.范围最大. 联系:在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 关联:表示对象之间的关系,既有数量性,又有方向性:动词:将对象之间 ...
- Hibernate关联关系之多对多
多对多映射关系 建立多对多单向关联关系 创建Employee类: public class Employee { private Integer empid; //员工编号 private Strin ...
随机推荐
- UWP 记一次WTS 和 UCT翻车经历
这次翻车,真的,在网上绝对找不到回答的. 只有在WTS的Issues讨论中才找到,哈哈 不过这个应该比较少遇到吧,据我所知,提出Issue那个大胸弟和我都遇到了... 翻车具备的条件如下: 1. 使用 ...
- 几个原生js方法总结
一.document.getElementById('emoji').addEventListener('click', function(e) { var emojiwrapper = docume ...
- d-ary heap实现一个快速的优先级队列(C#)
d-ary heap简介: d-ary heap 是泛化版本的binary heap(d=2),d-ary heap每个非叶子节点最多有d个孩子结点. d-ary heap拥有如下属性: 类似comp ...
- Linux命令对应的英文及整体学习法
linux命令 注意一下内容收集与互联网,如果觉得有版权问题,请联系. 用Linux命令的时候,如果熟悉对应英文的含义,更有助于理解相应的命令.man: Manual 意思是手册,可以用这个命令查询其 ...
- aircrack-ng无线破解实验
查看无线网卡 airmon-ng 开启网卡监听模式 airmon-ng start wlan0 扫描附近的wifi airodump-ng wlan0mon 停止扫描: ctrl c 使用airodu ...
- Daily Scrumming* 2015.10.29(Day 10)
一.总体情况总结 二.今明两天任务表 Member Today’s Task Tomorrow’s Task 江昊 了解微信API,与社团服务平台创业公司嗨社团创始人沟通,了解其平台运营方案与商业模式 ...
- 场景调研 persona
1.姓名:王涛 2.年龄:22 3.收入:基本无收入 4.代表用户在市场上的比例和重要性:王涛为铁道学生.本软件的用户主要是学生和老师,尤其是广大的铁大学子,所以此典型用户的重要性不言而喻,而且比例相 ...
- C#中周,月,第几周,周开始结束时间de方法总结
1.c#获取当前时间是本年的第几周,本月的第几周 private static int getWeekNumInMonth(DateTime daytime) { int dayInMonth = d ...
- jsp九大内置对象之二response
这里主要写response向浏览器输出数据时的编码,输出数据有两种: response.getOutStram().write("讲讲".getBytes("utf-8& ...
- AttributeError: module ‘tensorflow.python.ops.nn’ has no attribute ‘leaky_relu’
#AttributeError: module 'tensorflow.python.ops.nn' has no attribute 'leaky_relu' 的原因主要是版本的问题 解决方法是更新 ...