게 으 른 로드 이상 및 처리
Hibernate 가 데이터베이스 에서 어떤 지구 화 실 체 를 초기 화 할 때, 이 실체의 집합 속성 은 지구 화 클래스 와 함께 초기 화 됩 니까?집합 속성 에 10 만, 심지어 백만 의 기록 이 포함 되 어 있 으 면 지구 화 실 체 를 초기 화 하 는 동시에 모든 집합 속성 을 캡 처 하면 성능 이 급 격 히 떨어진다.시스템 은 집합 속성의 전부 가 아니 라 지구 화 된 집합 속성 중의 일부 기록 만 사용 할 수 있 습 니 다. 그러면 모든 집합 속성 을 한 번 에 불 러 올 필요 가 없습니다.
load () 방법의 게 으 름 로드 원리:
Hibernate 에서 조회 방법 은 두 가지 가 있 는데 그것 이 바로 get () 과 load () 이다. 이 두 가지 방법의 차이 점 은 load () 가 게 으 른 로 딩 의 특성 을 가지 고 있다 는 것 이다.Load () 방법 은 특정한 데 이 터 를 조회 할 때 이 데 이 터 를 지정 한 대상 으로 되 돌려 주지 않 고 이 대상 의 일부 속성 을 사용 해 야 할 때 만 데이터 베 이 스 를 방문 하여 데 이 터 를 얻 는 것 이다.그의 장점 은 프로그램 자체 가 데이터베이스 와 의 빈번 한 상호작용 으로 인 한 처리 속도 가 느리다 는 것 이다.
게 으 른 로드 이상 원인:
이 방법 을 호출 하고 조 회 된 프 록 시 대상 을 되 돌려 줍 니 다. 관련 대상 을 되 돌려 준 후 이 대상 의 name 속성 을 인쇄 합 니 다. 이 때 org. hibenate. Lazy InitializationException 이상 을 던 집 니 다.이것 은 게 으 른 로 딩 이 이상 을 초기 화 할 수 없다 는 것 입 니 다. 게 으 른 로 딩 을 할 때 대리 대상 을 통 해 데이터 베 이 스 를 조회 하려 면 이 session 이 닫 히 기 전에 해 야 합 니 다.그러나 세 션 종료 후 프 록 시 대상 을 꼭 사용 해 야 한다 면 Hibernate 에서 프 록 시 대상 을 초기 화 하 는 방법 initialize () 를 정의 합 니 다. 이 방법 을 통 해 프 록 시 대상 을 초기 화 할 수 있 습 니 다.
예 를 들다
방법 1: lazy = "false" 게 으 른 로 딩 닫 기: 로 딩 지연 기능 닫 기 (추천 하지 않 음)
1. JSP 페이지
<s:iterator value="#departmentList">
<tr class="TableDetail1 template">
<td width="20%">${name} </td>
<td width="20%">${parent.name}</td>
<td width="20%">${description} </td>
<td width="40%">
<s:a action="departmentAction_delete?id=%{id}" onclick="return confirm(' , ?')"> </s:a>
<s:a action="departmentAction_editUI?id=%{id}"> </s:a>
<a href="setPrivilegeUI.html"> </a>
</td>
</tr>
</s:iterator>
2. 인 스 턴 스 (부서 표 자체 관련, 부서 와 부속 문 1 대 다 중 관계)
맵 파일
public class Department {
/** */
private Long id;
/** */
private String name;
private String description;
/** */
private Department parent;
private Set<Department> children = new HashSet<Department>();
// Getter Setter
}
4. 데이터베이스 추출 작업
<class name="Department" table="department">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<property name="description" />
<!-- parent , Department( ) -->
<!-- , " " lazy="false" -->
<many-to-one name="parent" class="Department" column="parentId"<span style="color:#ff6666;"> lazy="false"</span>/>
<!-- children , Department( ) order-by : sql orderby -->
<!-- cascade="delete" -->
<set name="children" cascade="delete" order-by="id ASC"<span style="color:#ff0000;"> lazy="false"</span>>
<key column="parentId"></key>
<one-to-many class="Department"/>
</set>
</class>
5. Hibernate 프로필 에 다음 속성 추가
public List<Department> findAll() {
// TODO Auto-generated method stub
//SQL , Role ,
//2.getSimpleName() ,getName() +
return getSession().createQuery(//
"FROM Department" .list();
}
방법 2: j 는 필터 에 의 해 제어 되 고 session 의 생명 주 기 를 연장 시 키 며 Session 닫 기 를 페이지 로 데 이 터 를 불 러 올 때 까지 연장 합 니 다.
<property name="hibernate.show_sql">true</property>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.