Web/팁

[JPA, Lombok] @Setter 없애기 대안

목차 (클릭시 해당 목차로 이동)


     

     

     

     

    1. 생성자를 통해 주입한다.

    package study.datajpa.entity;
    
    import lombok.Getter;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    @Entity
    @Getter
    public class Member {
    
        @Id
        @GeneratedValue
        private Long id;
        private String username;
    
        protected Member() {
        }
    
        public Member(String username) {
            this.username = username;
        }
    }
    

     

    1) 빈 생성자를 하나 추가해야한다. (자바 기본)

     

    2) 빈 생성자는 protected로 해야한다.

    private으로 하면 JPA의 프록시기능시 접근을 못할 수 있고, 그렇다고 public으로 하면 다른 개발자가 사용해도 되는 줄 착각하고 사용할 수 있기 때문이다.

     

     

     

     

    2. 중간에 변경해야할 경우에는 엔티티에 change 메소드를 추가한다.

    package study.datajpa.entity;
    
    import lombok.Getter;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    @Entity
    @Getter
    public class Member {
    
        @Id
        @GeneratedValue
        private Long id;
        private String username;
    
        protected Member() {
        }
    
        public Member(String username) {
            this.username = username;
        }
    
        public void changeUsername(String username) {
            this.username = username;
        }
    }
    

     

     

     

    + protected 빈 생성자는 롬복으로도 가능하다.

    package study.datajpa.entity;
    
    import lombok.Getter;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    @Entity
    @Getter
    @NoArgsConstructor(access = AccessLevel.PROTECTED)
    public class Member {
    
        @Id
        @GeneratedValue
        private Long id;
        private String username;
    
        public Member(String username) {
            this.username = username;
        }
    }