我正在开发一个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());
答案 0 :(得分:0)
您是否在数据库中检查过“婴儿”是否具有正确的parent_id?