xxx라는 필드에 선언하면 자동으로
@Getter @Setter
private String name;
...
user.setName("홍길동");
String userName = user.getName();
또한, 필드 레벨이 아닌 클래스 레벨에 @Getter 또는 @Setter를 선언해줄 경우, 모든 필드에 접근자와 설정자가 자동으로 생성
파라미터가 없는 기본 생성자 생성
모든 필드 값을 파라미터로 받는 생성자 생성
final이나 @NonNull인 필드 값만 파라미터로 받는 생성자 생성
@NoArgsConstructor
@RequiredArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
@NonNull
private String username;
@NonNull
private String password;
private int[] scores;
}
생성자 접근 Level를 설정할 수 있다.
xxxArgsConstructor(access = AccessLevel.PROTECTED)
왜? Entity 들은 Mapping 관계에 있을 때 ( N:1 ,N:M 등등 ) HibernateProxy
를 사용 해서 영속성 컨텍스트에 값이 있는지 확인 후 성능 향상을 위해 조회하기 때문에 만일 Foreign Entity 조회시 Target Entity의 접근 권한이 PRIVATE인 경우 Proxy 객체를 생성하는 과정에서 에러가 발생하게 된다.
HHH000143: Bytecode enhancement failed because no public, protected or package-private default constructor was found for entity: com.jpastudy.ms.domain.Entity.StoreEntity. Private constructors don't work with runtime proxies!
@ToString(exclude = "password") // to string 출력시 제외
public class User {
private Long id;
private String username;
private String password;
private int[] scores;
}
// 부모 클래스 필드 값들도 동일한지 체크
// default : false
@EqualsAndHashCode(callSuper = true)
public class User extends Domain {
private String username;
private String password;
}
@Data는
한 번에 설정
@Data
public class User {
// ...
}
필요한 어노테이션만 쓰자! 비추