인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

eora21님의 프로필 이미지
eora21

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

임베디드 타입

임베디드 타입 내에서 엔티티 타입을 지정할 수 있다고 하셨는데, 정확한 방법이 궁금합니다.

작성

·

259

0

1. MailMan이라는 Entity를 만들었습니다.

package hellojpa;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class MailMan {

    @Id @GeneratedValue
    private Long id;
}

 

2. Address에서 해당 Entity를 사용해보기로 했습니다.

package hellojpa;

import javax.persistence.*;

@Embeddable  // 임베디드 타입, 해당 타입을 쓰는 엔티티의 DB 테이블에는 Address 로 들어가는 게 아닌, 각자의 필드가 스키마로 들어가게 된다. 임베디드 타입은 엔티티의 값일 뿐이다!
public class Address {
    private String city;
    private String street;
    @Column(name = "ZIPCODE")
    private String zipcode;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "MY_MAILMAN_PK", insertable = false, updatable = false)
    private MailMan mailMan;  // 임베디드 타입에서 엔티티 타입을 들고 있을 수 있다! 근데 안되네..?

    public Address() {
    }

    ...이하 생략

 

3. insertable = false, updatable = false 를 해제하면 코드가 돌지 않습니다.

 

4. 해당 설정을 제외하고서도 돌릴 수 있는 방법이 있을 것 같은데, 제가 어떠한 부분을 빼먹은건지 알 수 있을까요?

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. eora21님

이것은 연관관계 매핑을 정상적으로 하지 않아서 발생하는 문제로 보입니다.

연관관계 매핑 부분을 복습해주세요.

감사합니다.

eora21님의 프로필 이미지
eora21
질문자

답변 감사합니다. 따로 프로젝트를 생성하여 코드를 돌려보니 정상적으로 돌아가네요.. 아무래도 Member 엔티티에서 Address 관련 이것저것 테스트해보다가 어디선가 충돌이 났던 것으로 보입니다. 하지만 당시 문제점을 찾지 못 한 제 불찰이기도 합니다.. 앞으로 더 열심히 공부하고 노력하도록 하겠습니다!

eora21님의 프로필 이미지
eora21

작성한 질문수

질문하기