-
JAVA/SPRING JPA Join 컬럼 저장JAVA/Spring 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 가 저장된 것을 볼수 있다.
- 끝 -
내가 봐도 뭔말인지 모르겠다.
암튼 그렇다
'JAVA > Spring' 카테고리의 다른 글
[ 펌 ] JPA page 인터페이스 (0) 2018.04.18 spring boot .properties로 정적 리소스 경로 안잡힐때 (1) 2018.02.27 spring boot + JPA + security 로그인 설정 (9) 2018.02.19 AWS 8080 포트 열기 (0) 2018.02.12 JAVA/Spring + Angular 5 POST 전송시 400 에러 (0) 2018.02.05