반응형
최대 절전 모드, ID, 오라클, 시퀀스
데이터베이스는 Oracle이고 ID 열 값은 Oracle 시퀀스입니다. 이 시퀀스는 트리거에 의해 실행되므로 각 행을 삽입하기 전에 이 시퀀스를 사용하여 ID 값을 가져옵니다.그래서 엔티티 클래스에서 어떤 id 전략 생성을 정의해야 하는지 혼란스럽습니다.
@GenericGenerator(name = "generator", strategy = "increment")
@Id
@GeneratedValue(generator = "generator")
또는
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "idGenerator")
@SequenceGenerator(name="idGenerator", sequenceName="ID_SEQ")
또는
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
정말 혼란스러워요, 누가 이 주제에 대해 좀 설명해 줄 수 있나요?명확하게 설명해 주세요..
@Entity 클래스에 데이터를 제공하는 Oracle DB를 사용하는 프로젝트도 있었습니다.말씀하신 대로 시퀀스는 트리거를 통해 테이블의 PK에 대한 ID를 생성합니다.이것이 제가 다음 수업 중 하나에서 사용한 주석입니다.
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "G1")
@SequenceGenerator(name = "G1", sequenceName = "LOG_SEQ")
@Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
public int getId() {
return this.id;
}
이것은 당신이 당신의 게시물에서 보여준 두 번째 구문입니다.트리거는 DB에 의해 관리되므로 Java 코드에서 트리거에 대한 호출이 없습니다.문제가 발생하지 않으려면 DB에 시퀀스와 트리거가 동시에 있어야 했던 것으로 기억합니다.삽입할 행의 ID가 null인지 = 0인지 묻는 트리거입니다.이 경우 LOG_SEQ 시퀀스가 호출됩니다.
따라서 엔티티의 @Id에 값을 제공하면 해당 ID가 존재하지 않는 경우 DB에 값을 삽입할 수 있으며 시퀀스는 호출되지 않습니다.트리거 코드를 확인하여 정확히 어떤 일이 발생하는지 확인합니다.
언급URL : https://stackoverflow.com/questions/5331005/hibernate-id-oracle-sequence
반응형
'programing' 카테고리의 다른 글
php의 시간대 변환 (0) | 2023.08.10 |
---|---|
입력/쓰기를 중지한 후 입력 텍스트에서 이벤트를 트리거하는 방법은 무엇입니까? (0) | 2023.08.10 |
스키마 유효성 검사로 인해 스프링 부트 프로젝트가 실행되지 못함: 시퀀스 누락 [hibernate_sequence] (0) | 2023.08.10 |
하이픈 뒤에 줄 바꿈 없음 (0) | 2023.08.10 |
JQuery를 사용하여 입력 필드에 포커스를 설정하는 방법 (0) | 2023.08.10 |