2012-10-18 7 views
0

Open JPA 2.0을 사용하고 데이터베이스는 DB2 9.7입니다. 기본 키인 ID와 자동 생성 ID 열을 포함하는 엔티티를 만들고 싶습니다. 엔티티를 생성 한 후 생성 된 ID를 표시해야합니다. 엔티티를 영속화 한 후 엔티티를 호출하기 위해 entity.getId()를 호출합니다. 데이터베이스에서 , 내가 쿼리 아래 참조는 엔티티 작성 및 리턴 ID

select ID from final table 
    (INSERT INTO WEB.USER (NAME, LOCATION) VALUES (?, ?)) 

생성 된 ID를 엔티티를 생성하고 반환 할 수있는 대체/더 좋은 방법이 있나요

을 실행하기? 이것이 성능에 영향을 줄 것으로 예상되므로 "Select ID from final table"을 피하고 싶습니다.

+1

@TableGenerator를 시도해 볼 수 있습니다. 귀하의 회신에 감사드립니다 –

답변

0

"최종 테이블에서 ID 선택"을 피하려면 데이터베이스 시퀀스 (@SequenceGenerator)를 사용하고 있습니다. 이것은 잘 작동하고 @TableGenerator도이 문제를 분류했을 것입니다.

0

이는 DB2에서 자동 생성 ID를 검색하는 방법이며 사용자가 취할 수있는 조치는 없습니다. 다른 데이터베이스는 종종 여분의 SQL 쿼리를 필요로하기 때문에 ID를 즉시 반환하는 DB2의 경우 실제로 더 좋습니다. 나는 이렇게 더 빠른 방법이 있다고 생각하지 않는다.

이 최적화가 구현 된 OPENJPA-736을 확인하십시오.

+0

. 그러나 제 DBA는이 문제에 만족하지 않습니다. 생성 된 시퀀스에 ID 열을 변경하면 도움이 될까요? 마지막 옵션은 JPA를이 문제에 대한 직접 JDBC 실행으로 대체하는 것입니다. –

+0

DBA는 오라클을 지향하는 것으로 보입니다. DB2는 고유 ID에 대해 Sequences 및 Auto generated 컬럼을 제공하므로이 방법이 더 좋습니다. DBA가 행복하지 않다는 기준은 무엇입니까? 그는이 쿼리의 액세스 계획을 분석 했습니까? 왜 시퀀스를 원하니? 이 마지막으로 데이터베이스에 대한 두 가지 액세스를 의미하므로 IO 및 네트워크 트래픽이 증가합니다. 다른 옵션 (자동 생성)은 데이터베이스에서 전송되고 처리되는 패키지 하나입니다. – AngocA