[java] JPA @Column 주석을 참조하여 insertable = false 및 updatable = 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;
}



답변

문제의 관련 엔터티를 생성 / 업데이트 할 책임현재 엔터티에 없는 경우 그렇게 할 수 있습니다. 예를 들어 a PersonAddress. 엔티티를 생성하거나 업데이트하는 것은 엔티티 의 책임이 아니기 때문에 엔티티 의 엔티티 와 insertable=false, updatable=false@OneToMany관계 에 추가 하려고합니다 . 그것은 다른 길입니다.PersonAddressAddressPerson


답변

정의 insertable=false, updatable=false는 일반적으로 엔티티에서 필드를 두 번 이상 맵핑해야 할 때 유용합니다.

이것은 의미론적인 것이 아니라 기술적 인 IMO입니다.


답변

의 답변에 추가하고 싶습니다 BalusCPascal Thivent 다음 과 또 다른 일반적인 용도insertable=false, updatable=false .

ID는 아니지만 일련시퀀스 번호 인 열을 고려하십시오 . 시퀀스 번호를 계산하는 책임이 반드시 애플리케이션에 속할 필요는 없습니다.

예를 들어, 시퀀스 번호는 1000으로 시작하며 새 엔티티마다 하나씩 증가해야합니다. 이는 데이터베이스에서 쉽게 수행되며 매우 적절하게 수행되며 이러한 경우 이러한 구성이 의미가 있습니다.


답변

다른 예는 데이터베이스가 날짜 작성을 처리하게하려는 “created_on”열에 있습니다.


답변