kotlin jpa entity의 private set
11 Jun 2019lazy로딩을 위해서 entity는 open클래스여야 하고 open클래스는 setter를 private로 할 수 없다. 아래 코드 처럼 private set를 하게 되면 컴파일 에러가 발생한다.
Private setters are not allowed for open properties
@Entity(name = "myshop_users")
class User(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = 0L,
val email: String,
var picture: String,
@Enumerated
val role: Role
) {
var name: String = ""
private set
fun update(name: String, picture: String) {
this.name = name
this.picture = picture
}
}
아래와 같이 protected set 선언
@Entity(name = "myshop_users")
class User(
val email: String,
@Enumerated
val role: Role,
name: String,
picture: String
) {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = 0L
var name: String = name
protected set
var picture: String = picture
protected set
fun update(name: String, picture: String) {
this.name = name
this.picture = picture
}
}