【发布时间】: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