ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 가 저장된 것을 볼수 있다.


    - 끝 -


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


    암튼 그렇다

    댓글

Designed by Tistory.