>  기사  >  Java  >  Hibernate의 두 번째 수준 캐시와 Java의 다중 테이블 쿼리 소개

Hibernate의 두 번째 수준 캐시와 Java의 다중 테이블 쿼리 소개

不言
不言앞으로
2018-12-13 10:01:561446검색

이 글은 Hibernate의 2차 캐시와 Java의 다중 테이블 쿼리에 대해 소개합니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

Java 프레임워크인 Hibernate에 대한 두 가지 인터뷰 질문을 살펴보겠습니다. 이는 Hibernate에 대한 상식입니다.

1. Hibernate의 2차 캐시를 소개해주세요

다음 아이디어에 따라 질문에 답하려면:

(1) 먼저 캐시가 무엇인지 명확하게 설명하세요.

(2) 게다가 Hibernate의 Session을 사용하여 , 1차 캐시입니다. Cache, 즉 1차 캐시가 있는데 왜 2차 캐시가 필요한가요?

(3) 마지막으로 Hibernate의 2차 캐시를 구성하는 방법에 대해 이야기해 보겠습니다. .

캐시는 데이터베이스에서 이전에 쿼리하고 사용한 개체를 메모리(데이터 구조)에 저장하는 것입니다. 이 데이터 구조는 일반적으로 해시맵과 비슷하거나 나중에 개체를 사용할 때 가장 먼저 쿼리합니다. 캐시에 있는지 여부 이 개체가 있으면 캐시에 있는 개체를 사용하고, 그렇지 않은 경우에는 데이터베이스에 쿼리하고 다음 번 사용을 위해 쿼리된 개체를 캐시에 저장합니다. 다음은 캐시의 의사 코드입니다.

는 Hibernate의 2단계 캐시를 소개하고 다음 의사 코드를 사용하여 Cache의 구현 원리를 분석합니다.

Dao
{
hashmap map = new map();
User getUser(integer id)
{
User user = map.get(id)
if(user == null)
{
user = session.get(id);
map.put(id,user);
}
return user;
}
}
Dao
{
Cache cache = null
setCache(Cache cache)
{
this.cache = cache
}
User getUser(int id)
{
if(cache!=null)
{
User user = cache.get(id);
if(user ==null)
{
user = session.get(id);
cache.put(id,user);
}
return user;
}
return session.get(id);
}
}

Hibernate의 Session은 일종의 캐시입니다. 우리는 일반적으로 이를 Hibernate의 1차 캐시라고 부릅니다. Session을 사용하여 데이터베이스에서 객체를 쿼리하려는 경우에도 Session은 객체가 내부적으로 존재하는지 먼저 확인합니다. 직접 데이터베이스가 존재하지 않는 경우에만 데이터베이스에 액세스하고 쿼리 결과를 내부적으로 저장하십시오. 세션은 세션 프로세스를 나타내고 세션은 데이터베이스 연결과 연관되어 있으므로 세션을 오랫동안 열어 두지 않는 것이 가장 좋습니다. 일반적으로 하나의 트랜잭션에서만 사용되며 트랜잭션이 끝나면 닫혀야 합니다. 그리고 세션은 스레드에 안전하지 않으며 여러 스레드에서 공유할 때 문제가 발생하기 쉽습니다. 일반적으로 전역적 의미의 캐시만이 실제 캐시 애플리케이션이며 더 큰 캐시 값을 갖습니다. 따라서 Hibernate의 Session 레벨 캐시의 캐시 기능은 명확하지 않으며 애플리케이션 가치도 크지 않습니다. Hibernate의 두 번째 수준 캐시는 여러 스레드와 여러 트랜잭션이 이 캐시를 공유할 수 있도록 Hibernate를 위한 전역 캐시를 구성하는 것입니다. 우리가 바라는 것은 한 사람이 그것을 사용하면 다른 사람들도 그것을 사용할 수 있다는 것입니다.

두 번째 수준 캐시는 Hibernate와 독립적인 소프트웨어 구성 요소이며 여러 공급업체 및 조직에서 EHCache 및 OSCache 등과 같은 캐싱 제품을 제공합니다. Hibernate에서 2차 캐시를 사용하려면 먼저 hibernate.cfg.xml 구성 파일에서 사용할 제조업체의 캐시 제품을 구성해야 합니다. 그런 다음 캐시 제품 자체 구성 파일을 구성해야 합니다. Hibernate의 객체는 두 번째 수준 캐시 관리에 포함되어야 합니다. 2차 캐시의 원리를 이해하고 이러한 아이디어를 가지면 Hibernate의 2차 캐시를 구성하는 것은 쉽다.

확장된 지식: A SessionFactory는 두 번째 수준 캐시와 연결될 수 있습니다. 즉, 두 번째 수준 캐시는 하나의 데이터베이스에 있는 데이터를 캐싱하는 역할만 담당할 수 있습니다. Hibernate의 두 번째 수준 캐시를 사용할 때 주의하세요. 캐시된 데이터가 데이터베이스의 실제 데이터와 일치하지 않도록 현재 데이터베이스에 있는 데이터를 변경하십시오.

2. Hibernate는 다중 테이블 쿼리를 수행하고 각 테이블에서 여러 필드를 가져옵니다. 즉, 쿼리 결과 집합에 해당하는 엔터티 클래스가 없습니다.
해결책 1, Object[] 데이터에 따라 데이터를 꺼내고 직접 Bean을 구성합니다.

해결책 2, 각 테이블의 Bean에 대한 생성자를 작성합니다. 예를 들어 테이블 1이 두 필드를 찾으려는 경우. field1 및 field2에는 생성자가 있습니다. 함수는 Bean(type1 file1,type2,field2)이고 이 Bean은 hql에서 직접 생성될 수 있습니다.

위 내용은 Hibernate의 두 번째 수준 캐시와 Java의 다중 테이블 쿼리 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제