2009-11-06 4 views
4

프로덕션 MySQL 시스템의 기본 키에 GenerationType.IDENTITY를 사용하고 싶습니다. 그러나 지역 개발 및 테스트를 위해 HSQLDB를 사용하고 싶습니다. 문제는 HSQLDB가 GenerationType.IDENTITY를 지원하지 않는다는 것입니다 (최소한 Eclipselink에서). 나는 GenerationType.AUTO를 설정하려고 시도했다. 디폴트는 HSQLDB를위한 TABLE이지만, 불행히도 MySQL을 위해서도 마찬가지이다. persistence.xml에서 이것을 덮어 쓸 수있는 방법이 있습니까? 각 환경에서 올바른 작업을 수행 할 수 있도록 다른 트릭을 사용할 수 있습니까? 필자는 엔티티 구성을 XML로 설정하지 않았습니다 (주석에 모두 포함되어 있습니다).이 설정을 변경하고 싶지 않으므로이를 피하는 방법을 찾고 있습니다.테스트/생산을위한 다른 JPA GenerationType 지원

답변

2

기본 아이디어는 내부적으로 메타 데이터 정보를 기반으로 ID와 테이블 (또는 필요한 다른 전략)을 전환하는 맞춤 생성기를 사용하는 것입니다.

그러나 표준 JPA를 사용하여이를 수행 할 방법이 없습니다. @GeneratedValue annotation은 generator 매개 변수를 정의하지만 specify a custom generator을 작성할 수는 있지만 (내장 된 Table/Sequence 생성기 만 사용할 수 있도록 허용) 어떤 메커니즘도 제공하지 않습니다.

이 기능을 구현하는 것은 특정 JPA 제공 업체의 몫입니다. EclipseLink wiki has an example 맞춤 생성기를 정의하는 방법. TableSequence/NativeSequence 인스턴스를 내부적으로 만들고 session.getPlatform()을 기반으로 두 인스턴스간에 전환해야합니다.

면책 조항 : 위의 시도를 EclipseLink를 사용하여 시도하지 않았습니다. 하지만 나는 Hibernate에서 아주 비슷한 것을했다.

1

HSQLDB는 분명히 IDENTITY 열 (v1.8에서)을 지원하므로 분명히 EclipseLink의 결함입니다. 예를 들어, DataNucleus는 HSQLDB에 대한 IDENTITY 지원을 제공합니다.

XML을 사용하여 지정하면 분명히 알 수 있듯이 교차 데이터 저장소 배포에 이점이 있습니다.

+0

흥미 롭습니다. 나는 Eclipselink 사람들에게 문제를 제기 할 것이다. 이것은 확실히 나를 위해 물건을 간단하게 만들 것입니다. – Tim