hibernateは8のlazy策略を勉強します。
hibernate lazyポリシーは、以下において使用できます。
*ラベルから、値を取ることができます。true/false
*ラベルには、値を取ることができます。true/falseには、クラス強化ツールが必要です。
*
*
*
*
- ラベルから、値を取ることができます。true/false/extra
*
lazy概念:このオブジェクトを本当に使う時だけ作成します。hibernateにとって、本当に使っている時にはsqlが発行されます。
hibernateサポートlazyポリシーはsessionオープン状態でのみ有効です。
<class>ラベルのlazy特性は普通の属性にのみ適用されます。
集合上のlazyポリシー
import org.hibernate.Session;
import junit.framework.TestCase;
/**
* :
*
* <class> lazy=true,
*
* @author Administrator
*
*/
public class ClassLazyTest extends TestCase {
public void testLoad1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
// sql
Group group = (Group)session.load(Group.class, 1);
// sql
System.out.println("group.id=" + group.getId());
// sql
System.out.println("group.name=" + group.getName());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
public void testLoad2() {
Session session = null;
Group group = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
group = (Group)session.load(Group.class, 1);
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
// , LazyInitializationException , session
//hibernate lazy session
// Spring openSessionInViewFilter 。
System.out.println("group.name=" + group.getName());
}
}
hibernateの集合上のlazy戦略は、値を取ることができます。true/false/extra<class>ラベル上のlazyは集合上のlazy特性に影響しません。
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import junit.framework.TestCase;
import org.hibernate.Session;
/**
* lazy
* @author Administrator
*
*/
public class CellectionlazyTest1 extends TestCase {
public void testLoad1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
// sql
Classes classes = (Classes)session.load(Classes.class, 1);
// sql
System.out.println("classes.name=" + classes.getName());
// sql
Set students = classes.getStudents();
// sql
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println("student.name=" + student.getName());
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
public void testLoad2() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
// sql
Classes classes = (Classes)session.load(Classes.class, 1);
// sql
System.out.println("classes.name=" + classes.getName());
// sql
Set students = classes.getStudents();
// sql, sql
System.out.println("student.count=" + students.size());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
}
セット上のlazy=falseを設定します。他のデフォルト
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import junit.framework.TestCase;
import org.hibernate.Session;
/**
* lazy=false,
* @author Administrator
*
*/
public class CellectionlazyTest3 extends TestCase {
public void testLoad1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
// sql
Classes classes = (Classes)session.load(Classes.class, 1);
// sql, sql Classes Student
System.out.println("classes.name=" + classes.getName());
// sql
Set students = classes.getStudents();
// sql
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println("student.name=" + student.getName());
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
public void testLoad2() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
// sql
Classes classes = (Classes)session.load(Classes.class, 1);
// sql, sql Classes Student
System.out.println("classes.name=" + classes.getName());
// sql
Set students = classes.getStudents();
// sql
System.out.println("student.count=" + students.size());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
}
セット上のlazy=extra(推奨)を設定します。他のデフォルト
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import junit.framework.TestCase;
import org.hibernate.Session;
/**
* lazy=extra,
* @author Administrator
*
*/
public class CellectionlazyTest4 extends TestCase {
public void testLoad1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
// sql
Classes classes = (Classes)session.load(Classes.class, 1);
// sql
System.out.println("classes.name=" + classes.getName());
// sql
Set students = classes.getStudents();
// sql
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println("student.name=" + student.getName());
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
public void testLoad2() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
// sql
Classes classes = (Classes)session.load(Classes.class, 1);
// sql
System.out.println("classes.name=" + classes.getName());
// sql
Set students = classes.getStudents();
// sql, sql
System.out.println("student.count=" + students.size());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
}
片端連結上のlazyポリシー
import org.hibernate.Session;
import junit.framework.TestCase;
/**
* lazy
* @author Administrator
*
*/
public class SingleEndTest1 extends TestCase {
public void testLoad1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
// sql
User user = (User)session.load(User.class, 1);
// sql
System.out.println("user.name=" + user.getName());
// sql
Group group = user.getGroup();
// sql
System.out.println("group.name=" + group.getName());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
}
import org.hibernate.Session;
import junit.framework.TestCase;
/**
* <many-to-one> lazy false,
* @author Administrator
*
*/
public class SingleEndTest2 extends TestCase {
public void testLoad1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
// sql
User user = (User)session.load(User.class, 1);
// sql, sql User Group
System.out.println("user.name=" + user.getName());
// sql
Group group = user.getGroup();
// sql
System.out.println("group.name=" + group.getName());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
}
import org.hibernate.Session;
import junit.framework.TestCase;
/**
* <class> lazy=false,
* @author Administrator
*
*/
public class SingleEndTest3 extends TestCase {
public void testLoad1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
// sql
User user = (User)session.load(User.class, 1);
// sql
System.out.println("user.name=" + user.getName());
// sql
Group group = user.getGroup();
// sql
System.out.println("group.name=" + group.getName());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
}