JPA OneToMany列表始终为空

时间:2014-01-11 12:33:39

标签: java hibernate inheritance jpa one-to-many

我正在开发一个JPA项目,我遇到了OneToMany关系的问题。 我有扩展Person Class的成员类(@Inheritance(strategy = InheritanceType.JOINED),我也有扩展Person的Baby Class。

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Person{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    protected int id;
    @Column(name = "last_name")
    private String name;
    @Column(name = "first_name")
    private String firstName;
    ...

@Entity   
public class Member extends Person{
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "parent", targetEntity =       Baby.class)
    private Set<Baby> babies;
    ....

 @Entity
 public class Baby extends Person{
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "parent_id")
    private Member parent;
    ....

在宝贝方面没有问题,但会员班的宝贝总是空的!!

这是一些评论的重播:

是Mateus Viccari,我检查过,parent_id是好的 这是我的complet代码:

@Entity
public class Member extends Person implements Serializable{
    private static final long serialVersionUID =      -2683015788944585661L;
    @OneToMany(cascade = CascadeType.REMOVE, fetch = FetchType.EAGER, mappedBy = "parent")
    private Set<Baby> babies;   

public Member(String name, String firstName, String address, String numTel, String email, Date birthDay){
        super(name, firstName, address, numTel, email, birthDay);
}

Member(){
    super(null, null, null, null, null, null);
}


public Set<Baby> getBabies(){
    return babies;
}
public void setBabies(Set<Baby> babies){
    this.babies = babies;
}

}

@Entity
public class Baby extends Person implements Serializable{
    private static final long serialVersionUID = 7044695859030235095L;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "parent_id")
    private Member parent;

    public Baby(String name, String firstName, String address, String numTel,
        String email, Date birthDay, Member parent){
    super(name, firstName, address, numTel, email, birthDay);
    this.parent = parent;
}

Baby(){
    super(null, null, null, null, null, null);
}

public Member getParent(){
    return parent;
}

@Override
public String toString(){
    return "Baby [parent=" + parent + ", toString()=" + super.toString()
            + "]";
}

}

这是检索成员列表的方法:

Member parent = new Member("Aslami", "Khalid", "test", null, null, Date.valueOf("1974-04-15"));
Baby b = new Baby("Aslami", "Rayan", "test", null, null, Date.valueOf("2012-12-24"), parent);
em.getTransaction().begin();
em.createNativeQuery("DELETE FROM Baby b").executeUpdate();
em.createNativeQuery("DELETE FROM Member m").executeUpdate();
em.merge(b);
em.getTransaction().commit();
List<Baby> babies = em.createNativeQuery("SELECT b FROM Baby b").getResultList();
List<Member> members = em.createNativeQuery("SELECT m FROM Member m").getResultList();
assertEquals(1, babies.size());
assertEquals("Aslami", babies.get(0).getName());
assertEquals(1, members.get(0).getBabies().size());

1 个答案:

答案 0 :(得分:0)

您是否在数据库中检查过“婴儿”是否具有正确的parent_id?