JPA와 Google App Engine을 함께 사용하고 있습니다. 아주 간단한 @Entity가 Key와 String으로 구성되어 있다고 가정 해 보겠습니다. 이제이 엔티티 중 10000 개를 만들어 목록에 넣고 이제는 모두 저장하려고합니다.JPA로 GAE에 많은 항목 저장하기
내가
for(MyEntity entity : listOfAllEntities) {
em.persist(entity);
}
EntityManager에 EM 및 루프가 목록 내 모든 기관의 통과하기를 ... 사용하려고하면 .. I는 IllegalArgumentException 얻을 것이다 :
을java.lang.IllegalArgumentException : 단일 트랜잭션에서 여러 엔티티 그룹에서 작동 할 수 없습니다.
필자가 이해하는 한, persist() 호출마다 EntityManager를 닫았다가 다시 열어야합니다. 물론 이것은 매우 시간이 많이 걸립니다. 하루에 한 번씩 모든 항목을 다시로드하는 작업을 실행하려고합니다. GAE 정책에 따르면 작업의 시간 제한은 30 초입니다.
그래서 한 번에 500 개의 엔티티 만 저장하고 여러 번 작업을 실행하는 것이 더 복잡하다고 생각합니다.
내가하는 일을 성취 할 수있는 유일한 방법인가요, 아니면 여기에 뭔가 빠져 있습니까?
솔루션 : 모든 대답은 같은 방향을 가리 킵니다. 간단히 "더미 부모"개체를 만들어 일대 다 관계를 만들었습니다. 저는 제 경우에 부모님이 정말로 필요하지 않습니다. 그래서 현실 세계에서는 그렇게 말하지 않습니다. 그러나이 더미 엔티티를 각 하위 엔티티의 부모로 설정 한 후에는 트랜잭션에 대해 신경 쓰지 않고 이전과 마찬가지로 정확하게 저장할 수 있습니다. 모두에게 감사드립니다.
와우, 그건 기괴하다. 좋은 질문과 대답. –
[이 유사한 질문에 대한 답변보기] (http://stackoverflow.com/questions/2323777/google-app-engine-cant-operate-on-multiple-entity-groups-in-a-single-transacti). 당신이 가지고있는 것과 같은 이슈처럼 들립니다. –
그래, 그게 내 질문 이었어. 상위 엔티티를 추가 한 다음 소유 된 일대 다 관계를 유지하여 동일한 엔티티 그룹에 속하도록 수정했습니다. –