Spring Entity 작성시 사용하는 어노테이션

1. @Entity

  • 엔티티로 사용할 클래스에 엔티티임을 명시하는 어노테이션



2. @Table

  • @Table(name = "board") name 속성을 이용해서 해당 엔티티가 매핑하는 데이터베이스 테이블이 무엇인지 지정
  • 이렇게 작성된다면, 해당 Board 클래스는 데이터베이스에 "board" 테이블에 저장된다.
	@Table(name = "board")
	@Entity
	public class Board{....}
@Entity 에도 name이라는 속성이 있고, @Table에도 name이라는 속성이 있다. 

그렇다면 이 둘의 차이는 무엇일까?

  • @Entity(name ="")의 경우 말그대로 엔티티의 이름을 정할때 사용됩니다. 이는 HQL에서 엔티티를 식별할 이름을 정합니다.
  • @Table(name ="")의 경우 Database에 생성될 table의 이름을 지정할때 사용됩니다.
  • @Table이 없고 @Entity(name ="")만 존재하는 경우, @Entity의 name 속성에 의해, Entity와 Table 이름이 모두 결정됩니다.

참고 사이트




3. @Getter

  • lombok 라이브러리 내에 존재하며, getter 메소드를 대신할 수 있다.

  • 대신 @Setter 메소드는 작성하지 않았다. Setter를 무분별하게 남용하다 보면 여기저기서 객체(엔티티)의 값을 변경할 수 있으므로 객체의 일관성을 보장할 수 없다. 그리고 setter는 개별적으로 여러 개의 값을 변경하게 될 경우 그 의도를 알기 힘들다. 따라서 값을 바꾸고자 한다면 메소드를 작성하는 편이 더 좋다고 생각한다.




4. @NoArgsConstructor(access = AccessLevel.PROTECTED)

  • 파라미터가 없는 기본 생성자를 생성

  • 기본 생성자의 접근 제어를 PROTECTED 단계로 설정하게 된다면, new로 무분별한 객체 생성에 대해 한번 더 체크할 수 있게 된다. 예를 들어 회원에서 이메일, 아이디, 비밀번호를 모두 받게 되어있는데 하나만 받게끔 해서 객체를 생성하는 일을 방지할 수 있다.

  • 따라서 생성자에 @Builder를 설정하게 된다면, 해당 생성자를 사용하는 Builder가 따로 생성되어 의미있는 객체만 생성할 수 있게 된다.

좋은 웹페이지 즐겨찾기