programing

최대 절전 모드, ID, 오라클, 시퀀스

lastmoon 2023. 8. 10. 19:06
반응형

최대 절전 모드, 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

반응형