Hibernate中的抓取策略总结
来源:互联网 发布:shopinfo.php 漏洞 编辑:程序博客网 时间:2024/06/05 15:12
重点内容
1.抓取策略:抓取策略,在我看来就是对对象之间有关联的对象进行查询过程中如何获取关联对象的策略。
2.抓取策略和实体查询的相同点:都是查询数据!!!
(一). 直接抓取和延迟抓取
package cn.codeWang.entity;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;@Entity(name = "Department")public class Department { @Id @GeneratedValue private Long id; private String departname; public Department() { } public String getDepartname() { return departname; } public void setDepartname(String departname) { this.departname = departname; }}package cn.codeWang.entity;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToOne;@Entity(name = "Employee")public class Employee { @Id @GeneratedValue private Long id; private String empname; @ManyToOne(fetch = FetchType.LAZY) private Department department; public Employee() { } public String getEmpname() { return empname; } public void setEmpname(String empname) { this.empname = empname; } public Department getDepartment() { return department; } public void setDepartment(Department department) { this.department = department; }}import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.boot.MetadataSources;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.service.ServiceRegistry;import org.junit.After;import org.junit.Before;import org.junit.Test;import cn.codeWang.entity.Department;import cn.codeWang.entity.Employee;public class DemoTest { private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void init() { // 创建服务注册对象 ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build(); // 创建会话工厂对象 sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory(); // 会话对象 session = sessionFactory.openSession(); // 开启事物 transaction = session.beginTransaction(); } @After public void destory() { // 提交事物 transaction.commit(); // 关闭会话 session.close(); // 关闭会话工厂 sessionFactory.close(); } @Test //筛选需要的数据 public void testFetchTypeEAGER() { Employee emp = session.get(Employee.class, 3l); System.out.println("员工姓名="+emp.getEmpname()); System.out.println(" 部门="+emp.getDepartment().getDepartname()); }@Test //筛选需要的数据 public void testFetchLazy() { Employee emp = session.get(Employee.class, 3l); System.out.println("员工姓名="+emp.getEmpname()); System.out.println(" 部门="+emp.getDepartment().getDepartname()); }}
A1.使用@ManyToOne(fetch = FetchType.LAZY)控制台输出结果为:
Hibernate: alter table Employee add constraint FK14tijxqry9ml17nk86sqfp561 foreign key (department_id) references Department (id)Hibernate: select employee0_.id as id1_1_0_, employee0_.department_id as departme3_1_0_, employee0_.empname as empname2_1_0_ from Employee employee0_ where employee0_.id=?员工姓名=张一山Hibernate: select department0_.id as id1_0_0_, department0_.departname as departna2_0_0_ from Department department0_ where department0_.id=? 部门=工程部
A2.使用@ManyToOne(fetch = FetchType.EAGER)控制台输出结果为:
Hibernate: alter table Employee add constraint FK14tijxqry9ml17nk86sqfp561 foreign key (department_id) references Department (id)Hibernate: select employee0_.id as id1_1_0_, employee0_.department_id as departme3_1_0_, employee0_.empname as empname2_1_0_, department1_.id as id1_0_1_, department1_.departname as departna2_0_1_ from Employee employee0_ left outer join Department department1_ on employee0_.department_id=department1_.id where employee0_.id=?员工姓名=张一山 部门=工程部
总结:
1.使用直接抓取策略Hibernate直接发出一条select查询语句查询连接表。
2.使用延迟抓取策略Hibernate一前一后发出两条select查询语句分别查询两张表的数据。
(二)批量抓取策略
作用: Hibernate提供@BatchSize,它用来抓取未初始化的实体代理。
阅读全文
0 0
- Hibernate中的抓取策略总结
- Hibernate中的抓取策略
- hibernate中的赖加载,抓取策略,批量抓取
- Hibernate抓取策略
- Hibernate的抓取策略
- Hibernate Fetch 抓取策略
- hibernate 抓取策略
- hibernate抓取策略
- Hibernate------抓取策略
- Hibernate 抓取策略
- hibernate抓取策略
- hibernate抓取策略
- hibernate---->抓取策略
- hibernate 抓取策略
- Hibernate的抓取策略
- Hibernate抓取策略
- hibernate抓取策略
- hibernate 抓取策略fetch
- Java中Class.getXXX()和Class.getDeclaredXXX()的区别
- python中解决死锁的方法
- mysql的优化方法,自己总结的
- 图的广度优先搜索--python实现
- arg_scope 解读
- Hibernate中的抓取策略总结
- DBSDFJ4275序列
- 1072. Gas Station 解析
- mysql中的null与空字符串的区别
- 进程间通信方式简介
- windows7 python3.5安装
- HDU 4605 Magic Ball Game (在线主席树|| 离线 线段树)
- python同步应用:多个线程有序执行
- 【FirstKotlinApp】使用Kotlin封装6.0的权限请求流程