2016-06-23 2 views
0

저는 두 개의 엔티티가 있습니다 사용자프로필 하나의 사용자가 하나의 프로필을 가지고 있습니다. ,JPA를 사용하여 외국 법인에서 특정 가치를 얻으십시오

@Entity 
public class User { 

    @Id 
    private String id; 

    @Column(unique = true, nullable = false) 
    private String email; 

    @Column(unique = true, nullable = false) 
    private String name; 
} 

그래서 질문이 프로필 엔티티 매핑에 관한, 까다로운 것은 여기 이 (안 전체 사용자의 실체) 정보가 사용자의 이메일을 포함하고있다 :

User 엔티티 매핑은 매우 명확하고 다음과 같습니다 프로필에 의해 업데이트되거나 저장되어서는 안되기 때문에 외국 사용자 엔터티의 전자 메일 읽기 전용 속성입니다.

나는 사용자의 이메일을 얻기 위해 다음 프로필의 엔티티 매핑을 사용 :
@Entity 
public class Profile { 

    @Id 
    private String userId; 

    @PrimaryKeyJoinColumn 
    private User user; 

    @Basic 
    private String firstName; 

    @Basic 
    private String lastName; 

    // ... 

    public String getEmail() { 
     return user.getEmail(); 
    } 
} 

그래서 내가 전체 개체를 결합하고 여기에 작업을 위임하기로 결정했다. 지금까지 내가 이해는이 같은 @Column에 몇 @JoinColumn를 사용하는 것은 불가능합니다 :

@OneToOne 
@JoinColumn(name = "userId", insertable = false, updatable = false) 
@Column(name = "email") 
private String email; 

내가 그것이 다른 목적을 위해 설계되어 보인다 @SecondaryTable의 사용에 대한도 모르겠습니다.

JPA 매핑을 사용하여 외국 엔티티 필드을 얻는 더 좋은 방법이 있습니까?

  • JPA 백엔드 : EclipseLink가 2.6.2

답변

1

정말 JPA가 할 수 있도록 설계되었습니다거야. user.getEmail()으로 이메일을 보내는 것이 가장 깨끗한 옵션입니다.

전체 사용자를로드하는 데 너무 많은 걱정을해서는 안됩니다. 내가보기에 그것은 하나의 조인이고, JPA는 그것을 당신을 위해해야합니다. 성능에 미치는 영향은 최소화되어야합니다. (JPA를 사용할 때 개체 디자인에 대한 제한은 항상 있지만 개체 디자인에 너무 많은 영향을 미치지 않도록 내부 사용자 개체를 노출시키지 않아도됩니다.

최대 절전 모드를 사용 중이라면 이야기가 달라집니다. 그런 다음 @Formula 특수 효과를 사용할 수 있습니다. 그것은 더 많은 공연하지 않을 것입니다. Eclipselink는 그것과 같은 것이 없습니다.

관련 문제