2017-02-02 1 views
2

기술 스택 : Oracle 데이터베이스 11.2.0.2, Java 1.6, Hibernate 3.6.6. 최종.Hibernate - 배치 삽입이 실제로 수행되었는지 확인하는 방법

저는 동면하는 것이 처음입니다. 사소한 경우 사과드립니다.

Transaction tx = session.beginTransaction(); 
for (int i = 0; i < 10; i++) { 
    POJO pojo = new POJO(i); 
    session.save(pojo); 
} 
tx.commit(); 

hibernate.cfg.xml 최대 절전 모드 정말이 모든 삽입을 일괄 처리하는 경우 다음 항목

<property name="jdbc.batch_size">500</property> 

가 어떻게, 확인할 수있다 :

다음 코드는 몇 가지 최적화를 넣어했는데? 그것보다 10 인서트를 수행하면 이득이 없습니다. 내 경우

String query = "retrieve previously added element" 
PreparedStatement stmt = session.connection().prepareStatement(query.toString()); 
Result rs = statement.executeQuery(); 
/** check contents of rs */ 

가 이전에 추가 한 요소와 비어 있지 않은 집합을 반환 : 하나의 아이디어는 기록이 DB에 추가 된 경우 확인하는 JDBC 일반 쿼리 직후 save()를 넣어하는 것입니다. 아무 의미 없어? 일괄 처리가 작동하는지 다른 방법으로 확인할 수 있습니다. 사전

+0

내가 이해가 안 무서워요 리팩토링 –

+0

후 트랜잭션 메소드 코드를 추가합니다. –

답변

1

데이터베이스가 다음 다음과 같이 로깅 속성을 구성하려면 실제로 플러시 무엇인지 확인하려면

감사 :

log4j.rootLogger=info, stdout 
# basic log level for all messages 
log4j.logger.org.hibernate=debug 

# SQL statements and parameters 
log4j.logger.org.hibernate.SQL=debug 
log4j.logger.org.hibernate.type.descriptor.sql=trace 

을하고있는 hibernate.cfg.xml이 추가

<property name="show_sql">true</property> 

그러면 데이터베이스에 실제로 전송 된 내용을 볼 수 있습니다.

With 배치는 같은 출력이 있어야합니다 article

예를 들어 당신이 고려할 수있는 모든 $ 후 세척 : 또한 여기

insert into Pojo (id , titel) values (1, 'val1') , (2, 'val2') ,(3, 'val3') 

하는 것은 가장 효율적으로 일괄 처리를 활용하는 방법에 대한 몇 가지 팁을 가지고 좋은 게시물입니다 {jdbc.batch_size}가 저장됩니다.

Transaction tx = session.beginTransaction(); 
for (int i=0; i<100000; i++) { 
    Customer customer = new Customer(.....); 
    Cart cart = new Cart(...); 
    customer.setCart(cart) // note we are adding the cart to the customer, so this object 
    // needs to be persisted as well 
    session.save(customer); 
    if (i % 20 == 0) { //20, same as the JDBC batch size 
     //flush a batch of inserts and release memory: 
     session.flush(); 
     session.clear(); 
    } 
} 
tx.commit(); 
+0

감사합니다. 불행히도 나는 여전히 하나의 문장을 삽입하고있다. –

+0

$ {jdbc.batch_size} 저장 후 플러시 하시겠습니까? –

0

로깅 제공 업체에 "BatchingBatch"로거를 추가해야합니다.

org.hibernate.engine.jdbc.batch.internal.BatchingBatch 

당신이 좋아하는 로그 무언가에 볼 수있을 것이다보다 :이 메시지가 표시되지 않는

2018-02-20 17:33:41.279 DEBUG 6280 --- [   main] o.h.e.jdbc.batch.internal.BatchingBatch : Executing batch size: 19 

, 배치가 작동하지 않습니다.

는 최대 절전 모드 버전으로 테스트 : 5.2.12

관련 문제