JAVA/Spring

JAVA/SPRING JPA Join 컬럼 저장

cocho/kuby 2018. 2. 26. 23:22

항상 네이티브 쿼리로만 핸들링하다가 JPA 로 쓰니까 헷갈려서 메모함.


JPA 에서는 FK 를 PK 로 저장하려고 하면 에러가 난다.


예시:

@Getter @Setter
public class MemberEntity {

@Id
@GeneratedValue
Integer memberIdx;

@Column
String email;

@Column
String password;

@Column
String name;

@Column(nullable = false, columnDefinition = "tinyint default 1")
boolean isAccountNonExpired = true;

@Column(nullable = false, columnDefinition = "tinyint default 1")
boolean isAccountNonLocked = true;

@Column(nullable = false, columnDefinition = "tinyint default 1")
boolean isCredentialsNonExpired = true;

@Column(nullable = false, columnDefinition = "tinyint default 1")
boolean isEnabled = true;

@Column(columnDefinition = "enum('ADMIN', 'MEMBER', 'SYSTEM') NOT NULL DEFAULT 'MEMBER'")
@Enumerated(EnumType.STRING)
Role role;
}


@Entity
@Component
@Table(name = "tbl_mail")
@Getter @Setter
public class MailEntity {

@Id
@GeneratedValue
Long mailIdx;

@Column
String messageId;

@Column
String froms;

@Column
String subject;

@Column
String source;

@Column
String returnPath;

@Column
String destination;

@Column
String date;

@Column(columnDefinition = "enum('TO', 'CC', 'DANGER', 'DELETE')")
@Enumerated(EnumType.STRING)
MailType mailType;

@Column
boolean isRead = false;

@Column
Timestamp timestamp;

@ManyToOne(targetEntity = MemberEntity.class, cascade = CascadeType.ALL, optional = true)
@JoinColumn(name = "memberIdx")
MemberEntity memberEntity;
}



메일 엔티티에 맨 마지막이 멤버엔티티의 PK 가 되는데

이걸 서비스단에서

mailentity.setMemberIdx(member.getMemberIdx);


라고 지정할수가 없다.


FK 는 객체 전체를 지정 해주어야


정상적으로 MemberEntity 의 PK 가 저장된 것을 볼수 있다.


- 끝 -


내가 봐도 뭔말인지 모르겠다.


암튼 그렇다