programing

오라클의 최대 절전 모드 시퀀스인 @GeneratedValue(전략 = GenerationType).자동)

newstyles 2023. 7. 3. 22:37

오라클의 최대 절전 모드 시퀀스인 @GeneratedValue(전략 = GenerationType).자동)

@GeneratedValue(전략 = GenerationType)를 사용합니다.AUTO) - 엔티티에 대한 ID를 생성합니다.

어떻게 작동하는지는 모르겠지만, 제 자식 테이블에서는 부모 순서를 따르는 ID 값을 생성합니다.

//parent table
@Entity
@Table (name = "parent")
public class Parent {

    @Id
    @GeneratedValue (strategy = GenerationType.AUTO)
    @Column (name = "id")
    private long id;


    @OneToMany (cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
    @JoinColumn (name = "parentId")
    @ForeignKey (name = "FKparent")
    private List<child> child;

}

//child table
@Entity
@Table (name = "child")
public class Child {

    @Id
    @GeneratedValue (strategy = GenerationType.AUTO)
    @Column (name = "id")
    private long id;
}

상위 항목에 삽입된 ID 값은 시퀀스를 업데이트합니다.하위에 삽입된 ID 값은 시퀀스를 업데이트합니다.부모님의 다음 삽입에서, 순서는...하위 삽입으로 업데이트된 값 사용...

이 주석은 두 개의 시퀀스를 만드는 것이 아니라 하나만 만듭니다.이것이 정확합니까?

DAO 서비스를 사용하여 엔티티를 삽입했습니다.entityManager.persist(parent);

이러한 주석은 두 개의 시퀀스를 만드는 것이 아니라 하나의 시퀀스만 만드는 것입니다.이것이 정확합니까?

그것이 예상되는 행동입니다.사용 시@GeneratedValue(strategy = GenerationType.AUTO)JPA 제공업체는 특정 데이터베이스에 적합한 전략을 선택합니다.Oracle의 경우 이 시퀀스는 SEQUENCE가 되며, 사용자가 아무것도 지정하지 않았기 때문에 Hibernate는 다음과 같은 단일 글로벌 시퀀스를 사용합니다.hibernate_sequence.

이거 맞는건가요?글쎄요, 그건 당신의 필요에 따라 달라요.Oracle 시퀀스의 기본 최대값은 1E+27 또는 1,000,000,000,000,000,000,000입니다.많은 사람들이 이 정도면 충분합니다.

이제 사용할 수 있습니다.GenerationType.AUTO데이터베이스가 시퀀스를 사용할 때 시퀀스 이름을 계속 제어합니다.

@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="my_entity_seq_gen")
@SequenceGenerator(name="my_entity_seq_gen", sequenceName="MY_ENTITY_SEQ")
private Long id;

예, 이것은 정확하고 예상되는 것입니다.

각 테이블에 대해 개별 시퀀스를 만들 수 있지만 IMHO는 실제 이점이 없는 추가 코드일 뿐입니다.

@Entity
@Table(name = "table_seq")
@SequenceGenerator(name= "NAME_SEQUENCE", sequenceName = "SEQ_ID", initialValue=1, allocationSize = 1)
public class SeqEntity implements Serializable {
  private static final long serialVersionUID = 1L;

 @Id
 @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="NAME_SEQUENCE")
 private Long id;

}

언급URL : https://stackoverflow.com/questions/3068692/hibernate-sequence-on-oracle-generatedvaluestrategy-generationtype-auto