2014-10-20 4 views
0

스프링, 스프링 데이터 및 mysql을 사용했습니다. PersonEntityEmailEntity이 있습니다. 그들 사이에 OneToMany 관계가 있습니다. 즉 한 사람이 많은 이메일을 가지고 있습니다.OneToMany 관계에있는 모든 엔터티를 가져 오지 않습니다.

사람 엔티티

@Entity 
@Table(name = "person") 
public class PersonEntity 
{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "personid") 
    private Long id; 

    @OneToMany(fetch = FetchType.EAGER, cascade = javax.persistence.CascadeType.ALL, mappedBy = "id") 
    private List<EmailEntity> emails; 
} 

이메일 법인

@Entity 
@Table(name = "email") 
public class EmailEntity 
{ 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "emailid") 
    private Long id; 

    @ManyToOne 
    @JoinColumn(name = "personid") 
    private PersonEntity personEntity; 
} 

은 내가 데이터베이스에있는 사람에 대해 둘 이상의 이메일이 스프링 데이터

PersonEntity personEntity = personDAO.findOne(id); 

사용하는 사람이 데이터를 가져. 코드를 디버그 할 때 PersonEntity에는 하나의 EmailEntity 만 포함됩니다 (목록에 두 개 이상의 EmailEntities가 있음).

어디서 잘못 되었나요? 잘못 되었다면 제가 틀리게 만드시겠습니까?

+1

'mappedBy'는 관계의 뒷면을 보유하고있는 속성에 링크해야합니다. 귀하의 경우에는'id '가 아닌'personEntity' 일 것입니다. –

+0

아! 감사합니다;) –

+0

작은 실수로 문제가 해결 되었습니까? 그렇다면 실제 응답으로 게시 할 것입니다. –

답변

2

Annotation parameter mappedBy은 관계의 뒷면을 지탱하는 속성에 연결해야합니다. 귀하의 경우는 personEntity이며 id이 아닙니다. 아마 당신의 구성에서 일어난 어떤

@OneToMany(fetch=FetchType.EAGER, cascade=javax.persistence.CascadeType.ALL, mappedBy="personEntity") 
private List<EmailEntity> emails; 

는 이메일이 자신의 idid 또는 사람에게 맞추어를 가져온 것입니다.

관련 문제