hibernateは8のlazy策略を勉強します。


hibernate lazyポリシーは、以下において使用できます。
*ラベルから、値を取ることができます。true/false
*ラベルには、値を取ることができます。true/falseには、クラス強化ツールが必要です。
*ラベルから、値を取ることができます。true/false/extra
*片端関連で、値を取ることができます。false/proxy/noproxy
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);
		}
	}	
	
}