다음은 간단한 예제입니다. jpa 대량 삽입에 대한 여러 항목을 읽은 후 만들어졌습니다. 2 개의 영구 객체 User 및 Site가 있습니다. 한 사용자는 많은 사이트를 가질 수 있으므로 여기에 일대일 관계가 있습니다. 사용자를 만들고 여러 사이트를 사용자 계정에 만들거나 연결하려고한다고 가정합니다. 다음은 Site 객체에 대량 삽입을 사용할 의향을 고려한 코드의 모양입니다.JPA/Hibernate 벌크 (배치) 삽입
User user = new User("John Doe");
user.getSites().add(new Site("google.com", user));
user.getSites().add(new Site("yahoo.com", user));
EntityTransaction tx = entityManager.getTransaction();
tx.begin();
entityManager.persist(user);
tx.commit();
하지만이 코드를 실행하면 내가 SQL 출력은 다음을 참조하십시오 (내가 JPA 구현 공급자로 최대 절전 모드 사용하고 있습니다) : 그래서
Hibernate: insert into User (id, name) values (null, ?)
Hibernate: call identity()
Hibernate: insert into Site (id, url, user_id) values (null, ?, ?)
Hibernate: call identity()
Hibernate: insert into Site (id, url, user_id) values (null, ?, ?)
Hibernate: call identity()
, 나는 의미에게 "진짜"대부분은 없습니다 작품 또는 I를 삽입 혼란 스럽습니까?
여기 예제 프로젝트의 경우 source code입니다. maven 프로젝트이므로 mvn install을 다운로드하고 실행하여 출력을 확인하십시오.
업데이트 :
DEBUG : 조직
User user = new User("John Doe");
user.getSites().add(new Site(1, "google.com", user));
user.getSites().add(new Site(2, "yahoo.com", user));
entityManager.setFlushMode(FlushModeType.COMMIT);
EntityTransaction tx = entityManager.getTransaction();
tx.begin();
entityManager.persist(user);
tx.commit();
지금 내가 디버그 출력에 다음 줄을 : 켄 리우가 친절하게 조언 한 후
, 나는 장애인 사이트 개체 ID를 자동 생성했습니다. hibernate.jdbc.AbstractBatcher - 배치 크기 실행 : 2
작동합니다!
아,이 말이 맞습니다! 감사합니다. – abovesun
질문이 업데이트되었습니다. 감사합니다. – abovesun
어떻게 지금 키를 생성하고 있습니까? 키가 고유해야합니다. –