Hibernate 학습의 게으름
4019 단어 적재를 게을리 하다
Load On Demand(Load On Demand)는 독특하고 강력한 데이터 획득 방법으로 프로그램이 데이터베이스에 대한 접근을 지연시키는 것을 말한다. 이렇게 하면 데이터베이스에 접근하는 데 시간이 많이 걸리기 때문에 때때로 불필요한 접근을 보장할 수 있다.약술: 우리가 대상을 조회할 때 기본적으로 이 대상의 일반적인 속성만 되돌려주고 사용자가 대상 속성을 사용할 때 데이터베이스에 다시 한 번의 조회를 보낸다.이런 현상을 우리는 레이지현상이라고 부른다.해결 방법은 다음과 같습니다: Hibernate를 초기화합니다.initized (프록시 대상) 수정 대상 관계 파일 lazy 덮어쓰기 lazy =false 필터 (웹 프로젝트) openSession InView hibernate에서 lazy가 원-to-many의 원 측에 있지 않는
OpenSessionInView를 통해 게으름 로드를 해결합니다.우리의session 범위를 더욱 넓히는데, 단점은session이 닫히면 시간이 지연된다는 것이다
MyFilter1.java:
package com.sina.filter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.sina.util.HibernateUtil;
public class MyFilter1 extends HttpServlet implements Filter {
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
Session s=null;
Transaction tx=null;
try {
s =HibernateUtil.getCurrentSession();
tx=s.beginTransaction();
arg2.doFilter(arg0, arg1);
//System.out.prrintln("ok")
//System.out.println("ok");x.
tx.commit();
} catch (Exception e) {
if(tx!=null){
tx.rollback();
}
throw new RuntimeException(e.getMessage());
// TODO: handle exception
}finally{
HibernateUtil.closeCurrentSession();
}
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
HibernateUtil.java:
package com.sina.util;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
final public class HibernateUtil {
private static SessionFactory sessionFactory=null;
//
private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();
private HibernateUtil(){};
static {
sessionFactory=new Configuration().configure().buildSessionFactory();
}
// sesession
public static Session openSession(){
return sessionFactory.openSession();
}
// session
public static Session getCurrentSession(){
Session session=threadLocal.get();
//
if(session==null){
session=sessionFactory.openSession();
// session threadLocal, session
threadLocal.set(session);
}
return session;
}
public static void closeCurrentSession(){
Session s=getCurrentSession();
if(s!=null&& s.isOpen() ){
s.close();
threadLocal.set(null);
}
}
// openSessionInView
// ( hql) hql"delete upate ...??"
public static void executeUpdateOpenInView(String hql,String [] parameters){
Session s=getCurrentSession();
Query query=s.createQuery(hql);
//
if(parameters!=null&& parameters.length>0){
for(int i=0;i<parameters.length;i++){
query.setString(i, parameters[i]);
}
}
query.executeUpdate();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
단일 모드 게으름 불러오기 최종 쓰기 정적 내부 쓰기먼저 한 걸음 한 걸음 게으름 피우기 단례 모델의 한 걸음 진화 문법을 말하고 그 과정에서 궁극적인 문법의 장점을 이해한다 초판 코드 사상은 단례 모델의 기본 사상 조작이다. 개인적인 정적 속성을 만들어서 전 코드 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.