[지켜야 할 사항- 공통]
Serializable을 implements
equal, hashCode 메서드 구현(lombok 활용 가능)
:
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
- 클래스에 작성
@EqualsAndHashCode.Include
- 복합키로 사용할 각 필드에 작성
public class 이어야 함
기본 생성자 O
주의 사항 : 복합키를 정의한 클래스는 직렬화 처리가 되어있어야 함.
'객체지향적' : @IdClass 보다 더 객체지향적인 방법이며, @IdClass는 관계형 데이터베이스에 가까운 방법
Serializable을 implements
equal, hashCode 메서드 구현(lombok 활용 가능)
:
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
- 클래스에 작성
@EqualsAndHashCode.Include
- 복합키로 사용할 각 필드에 작성
public class 이어야 함
@EmbeddedId 어노테이션을 붙여주어야 함(복합키 클래스를 사용하고자 하는 필드에서)
기본 생성자 O
(1) MemberId 복합키로 구성된 클래스
@Embeddable
public class MemberId implements Serializable{
private int memberNo;
private Stirng memberId;
//두 필드를 묶어 복합키로 설정
public MemberId(){}
public MemberId(int memberNo, String memberId){
super();
this.memberNo = memberNo;
this.memberId = memberId;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MemberId memberId1 = (TaskId) o;
return memberId == memberId1.memberId && Objects.equals(employeeId, memberId1.memberNo);
}
@Override
public int hashCode() {
return Objects.hash(memberNo, memberId);
}
}
(2) Member 엔티티에서 복합키 사용
@Entity
public class Member{
@EmbeddedId
private MemberId memberPK;
private String phone;
private Stirng address;
//두 필드를 묶어 복합키로 설정
public Member(){}
public MemberId(MemberId memberPK, String phone, String address){
super();
this.memberPK = memberPK;
this.phone = phone;
this.address = address;
}
}
member.getMemberPK().getMemberNo()
와 같이 사용주의 사항 : 복합키를 정의한 클래스는 직렬화 처리가 되어있어야 함.
'관계형 데이터베이스' : @Embeddable 보다 덜 객체지향적인 방법이며, @IdClass는 관계형 데이터베이스에 가까운 방법
Serializable을 implements
equal, hashCode 메서드 구현(lombok 활용 가능)
:
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
- 클래스에 작성
@EqualsAndHashCode.Include
- 복합키로 사용할 각 필드에 작성
public class 이어야 함
Entity class의 필드명과 동일한 필드를 가지고 있어야 함
기본 생성자 O
(1) MemberId 복합키로 구성된 클래스
public class MemberId implements Serializable{
private int memberNo;
private Stirng memberId;
//두 필드를 묶어 복합키로 설정
public MemberId(){}
public MemberId(int memberNo, String memberId){
super();
this.memberNo = memberNo;
this.memberId = memberId;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MemberId memberId1 = (TaskId) o;
return memberId == memberId1.memberId && Objects.equals(employeeId, memberId1.memberNo);
}
@Override
public int hashCode() {
return Objects.hash(memberNo, memberId);
}
}
(2) Member 엔티티에서 복합키 사용
@Entity
@IdClass(MemberId.class)
public class Member{
@Id
private int memberNo;
@Id
private Stirng memberId;
private String phone;
private Stirng address;
//두 필드를 묶어 복합키로 설정
public Member(){}
public MemberId(MemberId memberPK, String phone, String address){
super();
this.memberPK = memberPK;
this.phone = phone;
this.address = address;
}
}
member.getMemberNo()
와 같이 사용