2010-12-13 1 views
2

우리는 현재 프로젝트를 위해 내부적으로 Oracle 10g를 사용하고 있으며, 변경 될 가능성은 적지 만 결국이 응용 프로그램을 다른 고객에게 제공 할 예정이며 대체 무료 DB를 제안 할 수 있어야합니다.Hibernate 애플리케이션을 DB 독립적으로 만드는 방법은 무엇입니까?

그래서 사용되는 기본 RDBMS와 독립적 인 Hibernate 지속성 계층을 만드는 가장 좋은 방법은 무엇입니까? 이상적으로는 JDBC URL과 사용 된 dialect를 변경할 수 있기를 원하며 적어도 Oracle 10g와 MySQL 또는 PostgreSQL 사이를 전환하십시오.

주요 문제는 ID 생성 전략에서 비롯됩니다. 우리는 현재 테이블 당 하나의 시퀀스와 함께 ID 기반의 시퀀스 기반 발전기를 사용하고 있습니다. 명백한 움직임은 "기본"전략으로 전환하는 것 같습니다. 그렇다면 모든 테이블에 대해 하나의 고유 시퀀스가 ​​될 것입니까? 오라클에서 실행되는 프로덕션 시스템의 기존 데이터는 어떻게됩니까? 마이그레이션하는 방법? 함정은 무엇입니까?

하나의 RDBMS/방언에서 다른 방언으로 전환 할 때주의해야 할 사항은 무엇입니까?

답변

3

필자는 hilo ID 생성기가 모든 데이터베이스에서 이식 가능하다고 생각합니다. 그러나 '네이티브'를 선택한 경우 데이터베이스 데이터를 마이그레이션하는 데 어려움이 있습니다. 새 데이터베이스에서 처음부터 시작하는 것이 더 좋으며, 객체를 생성하고 Hibernate를 사용하여 초기 스키마 데이터를 초기화하는 것이 좋습니다. 즉, 데이터베이스 덤프/백업 중 하나에서 복원하고 트랜잭션 행을 삭제하여 더 이상 초기화 스키마가 없음을 의미합니다.

+0

감사합니다. 휴대용으로 보이는 hilo도 보았습니다. 그러나 새로 생성 된 ID와 중복되지 않고 기존 데이터 (기존 ID 및 FK 등)를 마이그레이션 할 수 있다고 생각하십니까? –

+0

먼저 모든 테이블에서 가장 큰 기존 ID를 찾아야합니다. 그런 다음 max_lo (hilo generator의 매개 변수)에 사용할 값을 결정하십시오. 예를 들어 값 max_lo = 100이고 가장 큰 기존 ID가 23456이면 hi_value 테이블의 next_value 필드를 235로 업데이트하여 다음 ID가 23500에서 시작되도록해야합니다. – YudhiWidyatama