Entity/Dto 관련 Annotaion
연관 관계 매핑
- 다대일(N:1) : @ManyToOne
- 일대다(1:N) : @OneToMany
- 일대일(1:1) : @OneToOne
- 다대다(N:M) : @ManyToMany
코드 예시
@ManyToOne
@ManyToOne
@JoinColumn(name = "cno")
@ToString.Exclude
private CategoryEntity categoryEntity;
@OneToMany
@OneToMany(mappedBy = "categoryEntity")
@Builder.Default
private List<BoardEntity> boardEntityList = new ArrayList<>();
@JoinColumn
- 외래키를 매핑할 때 사용한다.
- name 속성에는 매핑할 외래 키 컬럼명(이름)을 지정한다.
- referencedColumnName은 해당 외래키가 대상 테이블의 어떤 컬럼을 참조하는지 지정해주는 것
@ManyToOne
@JoinColumn(name = "bno")
@ToString.Exclude
private BoardEntity boardEntity;
@ToString.Exclude
@Getter @Setter @ToString
public class Member {
private String name;
private Board board;
}
@Getter @Setter @ToString
public class Board {
private String title;
private Member member;
}
- 라고 가정했을 때, 양방향 매핑인 것을 알 수 있다.
@Override
public String toString() {
return "Member{" +
"name='" + name + '\'' +
", board=" + board +
'}';
}
@Override
public String toString() {
return "Board{" +
"title='" + title + '\'' +
", member=" + member +
'}';
}
- ToString() 메소드를 썼을 때 서로 참조하기 때문에 무한반복하여 stackoverflow가 발생하게 된다.
- 이를 해결하기 위해 @ToString.Exclude 어노테이션을 추가하여 해당 부분에 toString() 메소드를 제외시켜 에러를 막는다.
@Builder.Default
- Builder는 값을 설정하지 않으면 자동으로 null을 채주는 anotation이다.
@Builder
@ToString
public class Member {
private String mname;
private int mage;
}
public class MemberInfo {
public static void main(String[] args) {
Member member = Member.builder()
.mname("gy")
.build();
System.out.println(member.toString());
}
}
- 이 경우는 따로 Builder 값을 설정하지 않았으므로, mage는 null값이 자동으로 들어가게된다.
@Builder
@ToString
public class Member {
@Builder.Default
private String mname = "gayeong";
@Builder.Default
private int mage = 24;
}
public class MemberInfo {
public static void main(String[] args) {
Member member = Member.builder()
.mname("gy")
.build();
System.out.println(member.toString());
}
}
- 이 경우는 @Builder.Default 값을 필드마다 지정해주었기 때문에 Builder()를 할때 값을 안넣어준 필드는 해당 @Builder.Default 밑에 지정한 값으로 자동 저장될 것이다. (기본값)
- 즉 현 예시를 보면 mname("gy")라고 지정했지만 mage()는 지정하지 않았다. -> 이러한 경우 mage의 기본값인 24가 들어가게 된다.