Java JPA OneToMany列表始终为空
我在做一个JPA项目,我和一个女人的关系有点问题。 我有一个扩展Person类的成员类(@heritance(strategy=InheritanceType.JOINED),还有一个扩展Person的Baby类Java JPA OneToMany列表始终为空,java,hibernate,inheritance,jpa,one-to-many,Java,Hibernate,Inheritance,Jpa,One To Many,我在做一个JPA项目,我和一个女人的关系有点问题。 我有一个扩展Person类的成员类(@heritance(strategy=InheritanceType.JOINED),还有一个扩展Person的Baby类 @Entity @Inheritance(strategy = InheritanceType.JOINED) public class Person{ @Id @GeneratedValue(strategy = GenerationType.AUTO) pr
@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;
....
@实体
@继承(策略=InheritanceType.JOINED)
公共阶层人士{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
受保护的int-id;
@列(name=“last_name”)
私有字符串名称;
@列(name=“first_name”)
私有字符串名;
...
@实体
公共类成员扩展个人{
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy=“parent”,targetEntity=Baby.class)
私生婴儿;
....
@实体
公共类婴儿扩展人{
@manytone(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name=“parent\u id”)
私人会员家长;
....
在婴儿方面没有问题,但在成员类中设置的婴儿总是空的
这是对一些评论的重播:
是的Mateus Viccari我查过了父母的身份证是正确的 这是我的完整代码:
@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()
+ "]";
}
}
@实体
公共类成员扩展Person实现可序列化{
私有静态最终长serialVersionUID=-26830157889494585661L;
@OneToMany(cascade=CascadeType.REMOVE,fetch=FetchType.EAGER,mappedBy=“parent”)
私生婴儿;
公共成员(字符串名、字符串名、字符串地址、字符串编号、字符串电子邮件、生日日期){
超级(姓名、名、地址、数字、电子邮件、生日);
}
成员(){
super(null,null,null,null,null,null,null);
}
公共集getBabies(){
返回婴儿;
}
公共空间障碍(设置婴儿){
这个。婴儿=婴儿;
}
}
@实体
公共类Baby扩展Person实现可序列化{
私有静态最终长serialVersionUID=704469585903035095L;
@manytone(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name=“parent\u id”)
私人会员家长;
public Baby(字符串名、字符串名、字符串地址、字符串numTel、,
字符串电子邮件、日期生日、成员家长){
超级(姓名、名、地址、数字、电子邮件、生日);
this.parent=parent;
}
婴儿(){
super(null,null,null,null,null,null,null);
}
公共成员getParent(){
返回父母;
}
@凌驾
公共字符串toString(){
返回“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());
Member parent=新成员(“Aslami”、“Khalid”、“test”、null、null、Date.valueOf(“1974-04-15”);
婴儿b=新生婴儿(“Aslami”、“Rayan”、“test”、null、null、Date.valueOf(“2012-12-24”)、父母;
em.getTransaction().begin();
em.createNativeQuery(“从婴儿b中删除”).executeUpdate();
em.createNativeQuery(“从成员m中删除”).executeUpdate();
em.merge(b);
em.getTransaction().commit();
List babies=em.createNativeQuery(“从婴儿b中选择b”).getResultList();
List members=em.createNativeQuery(“从成员m中选择m”).getResultList();
assertEquals(1,baby.size());
assertEquals(“Aslami”,babys.get(0.getName());
assertEquals(1,members.get(0.getBabies().size());
如果“婴儿”有正确的父id吗?做什么时它是空的?在JPA中选择数据库中有子项的成员时,程序员有责任处理实体之间的运行时关系。因此,如果无法检索引用项,则此注释有何用处?!您必须向我们展示更多的代码,而不是只是字段,毕竟我们不是魔术师。这可能会有帮助。是的,Mateus Viccari,我检查过,父id是好的。我在问题中添加了补充代码