2012-02-22 2 views
1

각 테이블에 해당 행의 다음 ID를 얻기 위해 시퀀스를 호출하는 트리거가있는 Oracle 데이터베이스가있는 응용 프로그램이 있습니다. Hibernate가 삽입물의 다음 ID를 지정하지 않고 단지 오라클과 트리거가 처리하도록 허용하도록 도메인을 어떻게 구성합니까?오라클이 최대 절전 모드 대신 ID에 대한 순서를 트리거하도록합시다.

이전에 시퀀스 생성기를 사용하기 위해 도메인을 설정했는데 이것이 작동하는 것처럼 보였습니다. DBA가 Grails의 시퀀스에 대한 선택 권한을 부여하지 않기 때문에 프로덕션 시스템에서 사용할 수 없습니다. 이것은 분명히 Hibernate를위한 생성자를 깨뜨린다.

답변

5

id 검색하기 위해 JDBC 삽입에서 generatedKeys을 사용하여 사용자 정의 생성기 설명이 최대 절전 모드 포럼 주제,있다 :

: 그 정의 생성기 당신을 위해 작동하는 경우 https://forum.hibernate.org/viewtopic.php?t=973262

을 당신을 통해 수 사용을해야한다은

static mapping = { 
    id generator:"jpl.hibernate.util.TriggerAssignedIdentityGenerator" 
} 
+0

트릭을 할 것처럼 보입니다. 고마워요. – thomj

0
순서 지원 데이터베이스와 일련 번호 지원 데이터베이스를 사용하는 경우는, 시나리오가 다음과 같다 수 없습니다

: Hibernate가 순서의 다음 값을 가져

    1. 순서 지원을

    2. Hibernate는 가져온 값을 엔티티의 ID로 설정합니다.
    3. 이 ID가 질의에 설정되어있어 0 내지
    4. 하이버 네이트 엔티티 지속
  1. 자동 번호 지원

    1. Hibernate는 JDBC 드라이버로부터 ID를 할당 페치 ID 값
    2. 절전없이 엔티티 지속

      사실 오라클의 드라이버의 문제로

때문에, 단계 2.2을 지원하지 않습니다 Hibernate는 마지막으로 할당 된 ID를 검색 할 수 없으므로 엔티티의 ID로 설정할 수있다.

+0

최대 절전 모드 쿼리 데이터베이스가 적기 때문에 Hi-Lo 키 생성기를 사용하는 것이 훨씬 좋습니다. –