【问题标题】:JPA OneToMany list is always emptyJPA OneToMany 列表始终为空
【发布时间】:2014-01-11 12:33:38
【问题描述】:

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

@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;
    ....

在baby方面没有问题,但是在Member类中设置的baby总是空的!!

这是一些cmets的重播:

是的,Mateus Viccari,我检查了,parent_id 是好的 这是我的完整代码:

@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());

【问题讨论】:

  • 空了怎么办?
  • “comcopy”>
  • 在 JPA 中,程序员有责任处理实体之间的运行时关系
  • 那么这个注解如果不能检索到引用的项目有什么用处呢?!
  • 您必须向我们展示更多您的代码,而不仅仅是字段,毕竟我们不是魔术师。这可能会有所帮助theserverside.com/news/thread.tss?thread_id=55191

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


【解决方案1】:

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

【讨论】:

  • 是的,Mateus Viccari,我检查了,parent_id 是好的。我在问题中添加了补充代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多