영속 객체 구성을 최대 절전 모드

POJO 객체와 정의 **. Hbm.xml 파일

-1 각 영구 객체가 필요 뽀조 클래스 정의를 만드는 데 필요한 경우, Hibernate는 POJO 클래스 정의의 인수가없는 생성자의 존재를 필요로, 최대 절전 모드 자바 반사 메커니즘을 촉진하여 인스턴스를 만들 : [java.lang.reflect의를. 는 Constructor.newInstance ()];

-2 급 속성 뽀조 클래스 정의는 관계없이 여부 조작에 관계없이 해당 세터 / 게터 방법이든 절전 모드는 자바 리플렉션 클래스 속성 타입이 바람직하게 사용된다 포장 유형에 의해 액세스 될 수있다, 공중 액세스 ;이 서비스를 분리 용이하게
직렬화 구현해야 최대 절전 모드 POJO의 각을 필요로하지 않습니다 -3,하지만 J2EE 응용 프로그램을 사용하고 RMI의 구조를 분산하는 경우, 다른 프로세스들 사이 또는 HttpSession에있는 POJO 전송 노드는 항상 필요하다 이 인터페이스가 구현되고

1  < 최대 절전 모드 매핑 패키지 = "com.leo.chen.dao.hibernate" > 
2      < 클래스 이름 = "사용자" 테이블 = "사용자" 동적 삽입 = "true"로 동적 업데이트 = "진정한" >  
3          < ID 이름 = "ID" = "ID" 액세스 = "속성" > 
4              < 생성기 클래스 = "네이티브" > </ 발전기 > 
5          </ ID > 
6          <속성 이름 = "이름" = "이름 액세스 =" 필드 " > </ 속성 > 
7          < 속성 ="비밀번호 " 항목 ="비밀번호 " 액세스 ="필드 " > </ 속성 > 
8      </ 클래스 > 
9   </ 최대 절전 매핑 >

삽입 기본 키 생성 전략을 행 지정

: 기본 키 ID는 일반적으로 최대 절전 모드를 들어 <생성>의 변화에도 불구하고, 비 - 비즈니스 관련하여 언제든지 주요 키에 영향을 미치는 보장, 별도의 필드를 사용하여 데이터베이스 테이블의 디자인은 다양한 방법으로 제공
# 1 대리 기본 키 : 증가를
보다 더 많은 수를 모든 데이터베이스에 적용 할 수 있지만, 한 가지를 수행, 데이터가 최대 ID가 테이블로 시작 알아 두 SQL 문을 수행 삽입, 하나의 단위로 각 세대에 대한 책임 최대 절전 모드, 현재 데이터를 삽입 DB를 동시에 연결 SessionFactory를, 증가의 증가는 작동하지, 단일 최대 절전 모드 앱 장면으로 DB 전용 액세스를하며 OID해야 롱, INT 또는 짧은;

# 2 대리 기본 키 : 정체성
기본 데이터베이스 생성에 대한 책임은 데이터베이스 기본 키 자기 통전 기능에 따라 서로 다른 유형으로 매핑함으로써 서로 다른 DB 구성 DB 방언에 따르면, DB가 제공하는, MySQL은 AUTO_INCREMENT, 정체성 등의 SQL 서버는, 바닥 데이터베이스가 자동 증가 유형 필드를 지원해야합니다 OID는, 긴 INT 또는 짧은해야합니다;

에이전트 기본 키 3 : 순서
최대 절전 모드로 설정되어 있지만 기본 데이터베이스 시퀀스에서, 지원해야 데이터베이스를 기본 시퀀스, MySQL은 시퀀스, 오라클, DB2 및 PostgreSQL을 지원을 지원하지 않으며, OID해야 롱, INT 또는 짧은;

# 4 번의 천연 기본 키 : 배정
현재 할당 애플리케이션에 의해 표시하며 재산권 자연 기본 키, 널 비즈니스 관련 결코 상기 기본 키 ID 일반 될 saveOrUpdate () 메소드는 null 오브젝트의 상태를 결정함으로써 결정될 수있다 유일한 추가 속성 <version>은 제어를 통해, 상기 일차 키 생성기는 판정하지 않는 경우, 속성이 할당 생성 할 때이를 임시 객체로서 표현되는 경우 저장되지 않은 값이 널 (null)이며, 이는 유리 비 - 널 객체 수단;

1  < 절전 매핑 > 
2    < 클래스 이름 = "org.hibernate.tutorial.domain.Cart"  
3  = "카트" 동적 업데이트 = "참" > 
4      < 아이디 이름 = "이름" 타입 = "문자열" 접근 = "필드" > 
5        < 이름 = "CART_NAME"  /> 
6        < 발생기 클래스 = "할당"  /> 
7      </ ID >  
8      <버전 이름 = "버전"= "VERSION"  
(9)        에 저장되지 않은 값 = "NULL" /> 
10    </ 클래스 > 
11  </ 최대 절전 매핑 >

# 5 복잡한 자연의 기본 키 : 복합-ID
고객 객체가 고객 ID 객체에 의해 결정된다, 이름과 구성 기업에 의한 고객 ID, 기본 키 클래스로 모든 자연 결합 상태를 구분하는 버전 속성을 정의 할 필요가 <대일> 태그는 회사를 나타냅니다 고객과의 일대일 관계로 많은, 고객 개체가 회사가 속성을 무시하면 저장 거짓 표현을 삽입 및 업데이트 재산;

1  < 절전 매핑 > 
2    < 클래스 이름 = "mypack.Customer" 테이블 = "고객" > 
3      < 복합 식별 = "고객 ID를 「클래스 ="mypack.CustomerId " > 
4        < 키 속성 이름 ="이름 " = "NAME" 유형 = "문자열"  /> 
5        < 키 속성 이름 = "회사" = "COMPANY_ID" 유형 = "긴"  />
6      </ 복합-ID > 
7     < 버전 이름 = "버전" = "VERSION" 저장하지 않은 값 = "NULL"  /> 
8      < 대일 이름 = "회사" = "CLIENT_ID"  
9        삽입 = "false"로 업데이트 = " 거짓"
 10        클래스 = "org.hibernate.tutorial.domain.Company"  /> 
11    </ 클래스 > 
12  </ 최대 절전 매핑 > 

# 6 힐로 : 하이버 네이트 기본 키 생성 알고리즘 자체 힐로 방법.
# 7 네이티브 : 힐로 | | 순서 기본 데이터베이스의 ID가 자동으로 기본 키 생성을 선택 할 수있는 기능을 지원
현재 컴퓨터의 MAC 주소에 따라 그리고 시간은 기본 키로 UUID를 생성 :. #의 UUID (8).
# 9 클래스를 정의 : ID가들은 org.hibernate.id.IdentifierGenerator를 구현하여 인터페이스를 사용자 정의 할 수 있습니다.

액세스 방법은 다오 클래스 속성 지정
: <ID> 및 <부동산> 액세스 클래스 속성을 제어 할 수있는 액세스 모드, 속성의 기본 속성
# = "필드"1 액세스 :하자를 최대 절전 모드 반사의 방법으로 직접 필드 액세스를 나타냅니다, 손실 캡슐화;
# 2 = 액세스 "속성"최대 절전 모드 게터 / 세터 액세스 필드 노출 외국인에 의해 표현하자가 권장;

다오 지정된 객체 클래스 로딩 전략 생성 방법 및 SQL과 연관된 데이터
로드 다오 개체의 <class> 요소 로딩 지연 속성 클래스 데이터의 타이밍을 제어하는데 이용 될 수 있고, 디폴트는 참이고;
# 1 "에 해당하는"= 지연 :. 때 부하 () 개체를로드 씨는 쿼리가 같은 다른 객체가 실제로 사용하는 경우에만 속성에만 기본 키가 SQL 문을 생성합니다 DB에 할당 된 프록시 객체가 될 것이다.
# 2 게으른 = "false"를 :로드 즉시, 즉, 바로 DB에 대한 SQL 쿼리를 생성 부하 방법을 사용하여.

<설정> 캐스케이드 쿼리 엘리먼트에 해당 연관된 객체 및 디폴트의 타이밍을 제어하는 지연로드를 사용한다
"는 true"# 1 = 지연 <클래스> 공감 레벨,
# 2 지연 = "거짓"으로 <클래스 > 마찬가지로 단계;
# 개 = 3 지연 "엑스트라". 미세 같은 객체의 크기와 연관된 요소에 대한 메소드 호출로 지연로드를 사용 / 전체 컬렉션에 대한 액세스는 구성 요소의 전체 세트를 로딩 특정 수익을 생성하지 않는 경우 / IsEmpty 함수 비 포함 SQL 정보;

연관된 객체 쿼리 생성 전략 제어 페치 소자를 사용할 때 캐스케이드 쿼리는 SQL <설정>을
= 페치 # 1 "을 선택"추가는 SQL 쿼리를 생성 독립적 디폴트 값.
# 2 = "부속"을 페치 : 데이터의 추가 세트는 SQL 쿼리를 생성하기 위해, 예컨대, 복수의 사용자가 각각의 사용자는 모든 사용자를 확인 모든 주문 일회용 별도 SQL 통해 이루어질 수 명령을 복수 갖는 경우와 같은 질의 다른 사용자에게 할당 된 메모리에 다른 순서.
왼쪽의 사용 표는 실행의 수를 줄일 SELECT, SQL을 생성하는 유일한 방법입니다 가입하지만,하지만 인해 성능이 저하 될 수 있습니다 관련된 여러 테이블에 즉시 모든 데이터를로드 게으른 속성을 무시합니다; # 3 "가입"= 가져 오기

캐스케이드 쿼리 / <일대> 게으른 <대일> 또한 등록 정보를 가져 오는 유사하게 작동합니다. 또한, 배치 크기의 <class>에 구비 <설정> 엘리먼트 = "10"하여 SQL 문을 실행 횟수를 줄이고, 데이터 캐시로 SQL 대량로드 데이터를 생성 할 수있다.

SQL 문을 필드 값에 의해 복잡한 쿼리 얻기
최대 절전 모드 totalPrice하는 동적으로 각 식의 작업은 필드 식의 SQL 문을에 따라 수, 값을 설정, 주문 테이블 TOTAL_PRICE 필요 필드가있다 없다, 쿼리의 결과는 빈 공식 totalPrice 인 경우 totalPrice 자바 클래스 속성 유형은 이중 포장을 설정해야하므로 값은 null를 돌려줍니다.

1  < 속성 = "totalPrice" 
 2    화학식 = "SELECT 명령 FROM SUM (o.price)를 O WHERE o.customer_id ID =" />

삽입을 강제하고 동적으로 생성 된 SQL 문 업데이트
Hibernate가 생성 된 사전 및 삽입 및 업데이트 절의 모든 컬럼에 대해 기본적으로 컴파일 할 수 있지만 미리 컴파일 된 SQL 문이 계류중인 관계없이 관계없이, 비어 있는지의 DB 필드에 기록되는 필드가 DB 업데이트에 기록되어 있는지, 모든, 작동시 기본 설정은 자원 DB의 이상을 소비 할 열 개, Hibernate는 <클래스> 삽입 및 업데이트의 제어 열에서 각각의 키에 따라서 제공
1 삽입 성질 : 기본 사실이며, 가격 필드를 나타내는 것은 더 이상 절전 삽입 오류가 발생하면, 즉 DB 열에 삽입되지 않을 수 없다
< "거짓은"속성 명 = "가격"삽입 = />

# 2 업데이트 속성 : 기본값은 true이고, 경우 DB 열을 업데이트 할 수 없습니다 즉 거짓, 가격 필드를 나타내는 것은 더 이상 생성되는 최대 절전 모드 업데이트;
<속성 이름 = "가격"업데이트 = "false로"/>

# 3 변경 가능한 속성 : 기본이 사실은 거짓 경우, 모든 클래스 속성의 속성의 업데이트가 거짓임을 나타내는,이 예제는 업데이트 할 수 없습니다;
<클래스 명 = "org.hibernate.totorial.domain.User"표 = " USER "변경할 수 =" "허위 / >

# 4의 동적 삽입 특성 : 기본이 거짓은; true 인 경우, 필드는 필드의 값을 포함 null이 아니고 삽입 동적 오브젝트의 삽입시 발생 삽입 문을 나타낸다
<클래스 명 = "org.hibernate.totorial. domain.User "테이블 ="USER "동적 -insert ="참 "/>

# 5 동적 업데이트 속성 : 기본은 거짓이며, 동적으로 생성 된 개체를 업데이트 UPDATE 문을 나타내는 true의 경우에만 업데이트 된 필드가 들어있는 필드의 값을 업데이트,
<클래스 명 = "org.hibernate.totorial.domain .User "테이블 ="USER "동적 -update ="참 "/>

# 6을 선택-전에 업데이트 속성 : 기본값은 한 Session.update ()의 사용으로,에 관계없이 대상 객체 속성 업데이트 업데이트 작업이 실행됩니다 여부의 것을, 거짓, true의 경우, 그것은 최초의 DB를 조회하는 SELECT 문을 실행합니다 및 상태 업데이트가 있는지를 비교하여, 상기 속성에만 업데이트 작업 수정하는 경우에만 대상체를 나타내는
"= <클래스 명 ="org.hibernate.totorial.domain.User "표 ="사용자 "SELECT-사전 업데이트 진정한 "/>

HTTPS : //www.cnblogs.com/leo-chen-2014/p/4940569.html 재현

추천

출처blog.csdn.net/weixin_33859844/article/details/94232543