kotlin jpa entity의 private set

lazy로딩을 위해서 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
    }
}