[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 Person
및 Address
. 엔티티를 생성하거나 업데이트하는 것은 엔티티 의 책임이 아니기 때문에 엔티티 의 엔티티 와 insertable=false, updatable=false
의 @OneToMany
관계 에 추가 하려고합니다 . 그것은 다른 길입니다.Person
Address
Address
Person
답변
정의 insertable=false, updatable=false
는 일반적으로 엔티티에서 필드를 두 번 이상 맵핑해야 할 때 유용합니다.
이것은 의미론적인 것이 아니라 기술적 인 IMO입니다.
답변
의 답변에 추가하고 싶습니다 BalusC 와 Pascal Thivent 다음 과 또 다른 일반적인 용도insertable=false, updatable=false
.
ID는 아니지만 일련 의 시퀀스 번호 인 열을 고려하십시오 . 시퀀스 번호를 계산하는 책임이 반드시 애플리케이션에 속할 필요는 없습니다.
예를 들어, 시퀀스 번호는 1000으로 시작하며 새 엔티티마다 하나씩 증가해야합니다. 이는 데이터베이스에서 쉽게 수행되며 매우 적절하게 수행되며 이러한 경우 이러한 구성이 의미가 있습니다.
답변
다른 예는 데이터베이스가 날짜 작성을 처리하게하려는 “created_on”열에 있습니다.