programing

JPA @Column 주석을 참조하여 insertable=false 및 updateable=false에 대해 설명하십시오.

prostudy 2022. 4. 14. 20:36
반응형

JPA @Column 주석을 참조하여 insertable=false 및 updateable=false에 대해 설명하십시오.

필드에 주석을 달 경우insertable=false, updatable=false, 값을 삽입하거나 기존 값을 변경할 수 없다는 뜻이 아닌가?왜 그렇게 하고 싶으세요?

@Entity
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToMany(mappedBy="person", cascade=CascadeType.ALL)
    private List<Address> addresses;
}

@Entity
public class Address {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ManyToOne
    @JoinColumn(name="ADDRESS_FK")
    @Column(insertable=false, updatable=false)
    private Person person;
}

참조된 열을 작성/업데이트하는 책임현재 도면요소가 아닌 다른 도면요소에 있는 경우 그렇게 할 수 있다.

정의insertable=false, updatable=false일반적으로 다음과 같이 엔터티에서 필드를 두 번 이상 매핑해야 할 때 유용하다.

이것은 IMO가 의미론적인 것이 아니라 확실히 기술적인 것이다.

나는 BalusCPascal Thivent의 또 다른 일반적인 용도의 대답을 덧붙이고 싶다.insertable=false, updatable=false:

ID가 아닌 일종의 시퀀스 번호인 열을 생각해 보십시오.시퀀스 번호 계산에 대한 책임이 반드시 애플리케이션에 속하는 것은 아닐 수 있다.

예를 들어, 시퀀스 번호는 1000으로 시작하며 새로운 엔티티마다 하나씩 증가해야 한다.이것은 데이터베이스에서 쉽게 그리고 매우 적절하게 수행되며, 그러한 경우 이러한 구성이 타당하다.

다른 예는 "created_on" 열에 있으며, 여기서 데이터베이스에서 날짜 생성을 처리하도록 할 수 있다.

이전 답변에 추가, 일반적인 사용법insertable=false, updatable=false중복 데이터베이스 쿼리를 저장하여 성능을 향상시키는 것이다.

상위 엔티티가 있는 클라이언트 클래스를 상상해 보십시오.클라이언트에 상위 항목이 있는지 확인하려면 해당 클라이언트의 값 존재 여부만 확인하십시오.parent_id칼럼을 세우다최대 절전 모드에게 상위 엔티티를 가져오도록 요청할 필요가 없으며, 다른 모든 연결과 함께 다음과 같은 추가 쿼리 수가 발생할 수 있다.

public class Client {
    @ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.LAZY)
    @JoinColumn(name = "parent_id")
    private Parent parent;

    @Column(name = "parent_id", insertable = false, updatable = false)
    private UUID parentId;
}

위의 설정에서parentIdfield는 단순히 에 저장된 모든 값을 가져온다.parent_id지배기업이 단독으로 편집/업데이트하는 열.

나는 그것이 단순히 다음을 의미한다고 생각한다.

지속성 공급자가 생성한 SQL INSERT 문에 열이 포함되는지 여부.

참조: https://www.objectdb.com/api/java/jpa/Column

Javax의 지속성 설명서에 따르면:

지속성 공급자가 생성한 SQL UPDATE 문에 열이 포함되는지 여부.

이곳의 공식 문서로 이해하는 것이 가장 좋을 것이다.

또 다른 이유는 속성이 보기 열에 매퍼되기 때문일 수 있다(예: 최대 절전 모드 엔터티는 테이블과 보기의 융합이다).따라서 칼럼을 삽입할 수 있다는 느낌(또는 업데이트됨)이 들지 않는다.

@Entity
@Table(name = "THE_VIEW")
@SecondaryTable(name = "THE_TABLE", pkJoinColumns = @PrimaryKeyJoinColumn(name = "THE_ID"))
public class MyEntity {

    @Id
    @Column(name = "THE_ID")
    private Integer id;

    @Column(name = "VIEW_COLUMN", updatable = false, insertable = false)
    private String viewColumn

    @Column(name = "TABLE_COLUMN", table = "THE_TABLE")
    private String tableColumn;

(여기서는 업데이트할 수 있는 보기에 대해 언급하지 않음)

참조URL: https://stackoverflow.com/questions/3805584/please-explain-about-insertable-false-and-updatable-false-in-reference-to-the-jp

반응형