프로덕션 MySQL 시스템의 기본 키에 GenerationType.IDENTITY를 사용하고 싶습니다. 그러나 지역 개발 및 테스트를 위해 HSQLDB를 사용하고 싶습니다. 문제는 HSQLDB가 GenerationType.IDENTITY를 지원하지 않는다는 것입니다 (최소한 Eclipselink에서). 나는 GenerationType.AUTO를 설정하려고 시도했다. 디폴트는 HSQLDB를위한 TABLE이지만, 불행히도 MySQL을 위해서도 마찬가지이다. persistence.xml에서 이것을 덮어 쓸 수있는 방법이 있습니까? 각 환경에서 올바른 작업을 수행 할 수 있도록 다른 트릭을 사용할 수 있습니까? 필자는 엔티티 구성을 XML로 설정하지 않았습니다 (주석에 모두 포함되어 있습니다).이 설정을 변경하고 싶지 않으므로이를 피하는 방법을 찾고 있습니다.테스트/생산을위한 다른 JPA GenerationType 지원
4
A
답변
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을 사용하여 지정하면 분명히 알 수 있듯이 교차 데이터 저장소 배포에 이점이 있습니다.
관련 문제
- 1. 또 다른 JPA 질문
- 2. 다른 버전의 Python 지원
- 3. JPA : id보다 다른 열과의 관계
- 4. NetBeans 6.7.1을 사용하는 SQL Server 2008에 대한 JPA 지원
- 5. @Inheritance JPA annotation에 다른 열을 지정하는 방법
- 6. JPA 엔티티 다른 엔티티를 지속 중임
- 7. Hibernate/JPA : 다른 데이터베이스에 엔티티 매핑
- 8. R을 다른 사용자로 실행할 때의 그래픽 지원
- 9. 스핑크스 음성 인식 프로그램의 다른 언어 지원
- 10. WiX 3.5에서 다른 AfterBuild 동작 지원
- 11. 파이썬 webframeworks의 시퀀스/ID 지원
- 12. 지원
- 13. Google App Engine 지원 추가 및 독립 실행 형 지원 유지
- 14. 어떻게 JPA
- 15. RadDatePicker 지원 Hijri 일정 지원
- 16. CriteriaBuilder (JPA)
- 17. 컨테이너없이 jpa
- 18. 거기 JPA
- 19. JPA Instrumentation
- 20. JPA persistence.xml
- 21. 데이터 객체로 JPA POJO
- 22. JSF 2 - CRUD 및 지속적인 지원
- 23. JPA 엔티티 매핑 확장
- 24. JPA : jpa-jar 위치를 하드 코딩하지 않으려면 어떻게해야합니까?
- 25. jpa ddl 유형 테스트
- 26. JPA 다중 트랜잭션 관리자
- 27. JPA : 다른 엔티티가 생성 될 때마다 엔티티 생성
- 28. JPA 또는 Hibernate - 다른 유형의 컬럼에 테이블 조인
- 29. 두 개 이상의 테이블을 다른 테이블에 병합하는 JPA
- 30. 메모리 내 대기열을 유지하기위한 JPA (또는 다른 대안)
흥미 롭습니다. 나는 Eclipselink 사람들에게 문제를 제기 할 것이다. 이것은 확실히 나를 위해 물건을 간단하게 만들 것입니다. – Tim