org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean
을 사용하여 JPA 방식으로 Spring/Hibernate를 사용하고 있으며 spring xml, persistence.xml 및 JPA 2 주석을 사용하여 구성했습니다.Spring EntityManager를 사용하여 대형 컬렉션을 지속시킬 때 성능을 향상시키는 방법 최대 절전 모드
기능상 정상적으로 유지됩니다. 그러나, 가능한 한 빨리 B의 큰 컬렉션을 가진 양방향 OneToMany를 가진 엔티티 A를 저장해야한다는 요구 사항이 있습니다.
나는
<property name="hibernate.id.new_generator_mappings" value="true" />
<property name="hibernate.jdbc.batch_size" value="50" />
<property name="hibernate.order_inserts" value="true" />
<property name="hibernate.order_updates" value="true" />
<property name="hibernate.cache.use_query_cache" value="false" />
<property name="hibernate.cache.use_second_level_cache" value="false" />
(응용 프로그램으로 많이 읽기로 씁니다) 삽입 속도와 메모리 사용을 줄이기 위해이 persistence.xml에서 다양한 옵션을 사용하고과는 사용하여 수행됩니다 지속
entityManager.persist(instanceOfA)
편집 추가 정보 :
:각 엔티티는 다음과 같이 생성 된 ID를 가지고 나는 쇼 SQL로 코드를 실행하면 내가 꽤을 복용 삽입 문을 많이 볼 수에 오라클 순서
CREATE SEQUENCE MY_SEQUENCE MINVALUE 1 MAXVALUE 999999999999999999999999999 START WITH 1 INCREMENT BY 50 NOCYCLE NOCACHE NOORDER;
관련 53,691,363,210
@Id
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.AUTO, generator="SEQUENCE_GENERATOR")
@SequenceGenerator(name="SEQUENCE_GENERATOR", sequenceName="MY_SEQUENCE", allocationSize=50)
private Long id;
.
난 5039 행마다 entityManager.flush(); entityManager.clear();
을 호출해야한다는 것을 읽었습니다.
persist()
에 플러시 명확 매 50 호출을 추가 (가)
entityManager.persist(instanceOfA);
instanceOfA.addB(instanceOfB);
entityManager.persist(instanceofB);
에 지속 해체하기 위해 필요한이 의미합니까?
더 깨끗한 방법이 있습니까? (내 실제 객체 계층 구조는 같은 관계와 B의 약 7 레이어를하고있다)
내가 삽입을 위해 JDBC를 사용하는 방법에 대한 생각,하지만 난 행 매퍼 : I에 대한 org.hibernate.StatelessSession
을 들었지만이있다
을 쓰기 싫어 어떤 시점에서 SessionFactory에 캐스팅하지 않고 JPA 엔티티 관리자로부터 가져 오는 방법은 없습니다. 다시는 매우 깨끗하지는 않습니다.
미리 감사드립니다.
- 각 테이블에 대해 PreparedStatement를 한 번 작성하고 반복해서 사용하십시오. 2) 멀티 스레드 응용 프로그램으로 만듭니다. –