728x90
@Entity
@JsonIdentityInfo(generator=xxxGenerator.class)
@Data
@ToString(exclude={"xxx","xxx"})
@Id
@GenericGenerator(name="xxx", strategy="xxx")
@GeneratedValue(generator="xxx")
@Column(name="xxx", nullable=false, length=00)
@JsonView(View.Xxx.Class)
@OneToMany(mappedBy = "xxx", cascade = CascadeType.ALL)
@Entity
- 실제 DB의 테이블과 매칭될 클래스
- JPA에서는 @Entity 어노테이션을 통해 자동으로 테이블을 생성해줌
- 기본값으로 클래스의 카멜케이스 이름을 언더스코어 네이밍(_)으로 테이블 이름을 매칭. ex) ProjectMember → project_member
[주의사항]
- PK는 Long 타입의 Auto_increment를 사용하도록 하고, 주민등록번호 같은 비즈니스상의 유니크 키나 복합키 등은 다음과 같은 이유 때문에 유니크 키로 별도로 추가하는 것을 권장한다.
- FK를 맺을 때 다른 테이블에서 복합키 전부를 갖고 있거나 중간 테이블을 하나 더 둬야 하는 상황이 발생
- 인덱스에 좋지 않은 영향을 미침
- 유니크한 조건 변경시 PK 전체 수정이 필요할 가능성 존재
- Entity 클래스와 기본 Entity Repository는 밀접한 관계를 맺고 있으므로 함께 관리하도록 한다.
- Builder와 Getter/Setter (tistory.com)
@JsonIdentityInfo(generator=xxxGenerator.class)
- Jackson 2.0 이상에서 사용 가능
- Jackson에서 양방향 관계(Bidirectional Relationship)로 맺어진 객체에서 무한 재귀가 발생하는 문제를 해결하는 어노테이션
- 직렬화에 포함 시킬 속성 값을 ‘property’ 속성에 지정해서 해결
- generator = xxxGenerator.class : 순환 참조시 사용할 Id를 생성하는데 사용되는 클래스
@Data
- 아래의 어노테이션들을 한꺼번에 설정해주는 어노테이션
- @ToString(exclude={"xxx","xxx"}) - 해당 메소드의 모든 필드를 출력하는 toString 메소드를 생성합니다.
- exclude : 특정 필드를 toString() 결과에서 제외시킴
- @EqualsAndHashCode - hashcode와 equals 메소드를 생성합니다.
- @Getter / @Setter - 말 그대로 getter함수와 Setter 함수를 생성합니다.
- @NoArgsConstructor - 파라미터를 요구하지 않는 생성자를 생성합니다. (access =AccessLevel.PROTECTED) 를 추가하게 될 경우 기본생성자의 접근 권한을 protected로 제한하게 됩니다.
- @RequiredArgsConstructor - 파라미터를 요구하는 생성자를 생성합니다.
- @AllArgsConstructor - 모든 인자를 가진 생성자를 생성합니다.
- @RequiredArgsContructor - 필요한 멤버만 받는 생성자를 생성합니다.
- @NonNull - 어떤 멤버가 필요한지 지정
- @ToString(exclude={"xxx","xxx"}) - 해당 메소드의 모든 필드를 출력하는 toString 메소드를 생성합니다.
- 이렇게 언급한 어노테이션을 삽입하게 될 경우, Class안에는 보이지 않지만 객체에서 사용할 수 있는 메소드들이 정의됩니다.
- DTO를 간편하게 작업 할 수 있음
@Id
- 객체의 Primary Key
@GenericGenerator(name="xxx", strategy="xxx")
https://techblog.woowahan.com/2607/
@GeneratedValue(generator="xxx")
- primary key 값을 위한 자동 생성 전략
@Column()
- 객체 필드와 DB 테이블 컬럼을 맵핑
- name : 맵핑할 테이블의 컬럼 이름을 지정 ("str")
- insertable : 엔티티 저장시 선언된 필드도 같이 저장
- updateable : 엔티티 수정시 이 필드를 함께 수정
- table : 지정한 필드를 다른 테이블에 맵핑
- nullable : NULL을 허용할지, 허용하지 않을지 결정 (false, true)
- unique : 제약조건을 걸 때 사용
- columnDefinition : DB 컬럼 정보를 직접적으로 지정할 때 사용
- length : varchar의 길이를 조정합니다. 기본값으로 255가 입력 (00)
- precsion, scale : BigInteger, BigDecimal 타입에서 사용, 각각 소수점 포함 자리수, 소수의 자리수를 의미
@JsonView(View.Xxx.Class)
- @Controller 어노테이션을 사용하면 기본적으로 view이름(페이지명)을 리턴하므로 문자열 형태의 데이터를 반환하기 위해 사용되는 것 중 하나
//mybatis
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
'두두의 IT' 카테고리의 다른 글
[AngularJS] 문법 (0) | 2022.05.30 |
---|---|
[JPA] 원하는 매개변수로 findBy 메소드 생성하기 (0) | 2022.05.26 |
MAC + Flutter + xCode 설치 (0) | 2022.05.18 |
String Boot Controller Annotation (0) | 2022.05.17 |
intelliJ Web Project 폴더 분석 (0) | 2022.05.16 |