JPA 및 Hibernate에서 데이터베이스 생성 열 값을 읽기 전용 필드로 정의하는 방법
@GeneratedValue 어노테이션 사용
@GeneratedValue 어노테이션을 사용하여 데이터베이스 생성 열을 지정할 때 strategy
속성을 GenerationType.IDENTITY
또는 GenerationType.SEQUENCE
로 설정하면 해당 열 값을 읽기 전용으로 정의할 수 있습니다.
예시:
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// ...
}
@Column 어노테이션 사용
@Column 어노테이션을 사용하여 데이터베이스 열을 지정할 때 insertable
속성을 false
로 설정하면 해당 열 값을 읽기 전용으로 정의할 수 있습니다.
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(insertable = false)
private String createdDate;
// ...
}
참고:
- 위 두 가지 방법은 모두 JPA 2.1 이상에서만 사용할 수 있습니다.
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Generated(value = GenerationStrategy.ALWAYS)
private Long id;
// ...
}
예제 코드
@GeneratedValue 어노테이션 사용
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// ...
}
@Column 어노테이션 사용
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(insertable = false)
private String createdDate;
private String name;
// ...
}
위 코드에서 createdDate
필드는 데이터베이스에서 자동으로 생성되는 값이며, 사용자가 직접 변경할 수 없습니다. name
필드는 사용자가 직접 입력해야 하는 값입니다.
- 위 코드는 예시이며, 실제 상황에 맞게 수정해야 합니다.
- JPA 및 Hibernate에 대한 자세한 내용은 관련 문서를 참고하십시오.
대체 방법
엔티티 클래스에 데이터베이스 생성 열 값을 설정하는 setter 메서드를 추가하지 않으면 해당 값을 읽기 전용으로 만들 수 있습니다.
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
위 코드에서 id
필드는 setter 메서드가 없으므로, 사용자가 직접 값을 변경할 수 없습니다.
엔티티 클래스에 @Immutable 어노테이션 사용
JPA 2.3 이상에서 사용 가능한 @Immutable
어노테이션을 엔티티 클래스에 추가하면 해당 클래스의 모든 필드를 읽기 전용으로 만들 수 있습니다.
@Entity
@Immutable
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
위 코드에서 MyEntity
클래스의 모든 필드는 읽기 전용이며, 사용자가 직접 값을 변경할 수 없습니다.
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Generated(value = GenerationStrategy.ALWAYS)
private Long id;
// ...
}
java hibernate jpa