[英]JPA - OneToMany relationship not loading children
我正在尝试配置此 @OneToMany 和 @ManyToOne 关系,但它根本不起作用,不知道为什么。 我之前在其他项目上做过这个,但不知何故它不适用于我当前的配置,这是代码:
public class Parent {
@OneToMany(mappedBy = "ex", fetch= FetchType.LAZY, cascade=CascadeType.ALL)
private List<Child> myChilds;
public List<Child> getMyChilds() {
return myChilds;
}
}
public class Child {
@Id
@ManyToOne(fetch=FetchType.LAZY)
private Parent ex;
@Id
private String a;
@Id
private String b;
public Parent getParent(){
return ex;
}
}
起初,我认为可能是导致故障的三重 @Id 注释,但在删除注释后它仍然不起作用。 所以,如果有人有任何想法,我正在使用 EclipseLink 2.0。
我只是尝试用一些记录执行代码,它总是返回 s==0 :
Parent p = new Parent();
Integer s = p.getMyChilds().size();
为什么?
问题很可能出在您的保存中,因为您不能在要保存的子对象中设置父对象引用,而不是使用检索或实体映射本身。 这可以从数据库行中得到确认,该行在您子表的外键列中必须为空。 例如正确保存
Parent p = new Parent();
Child child = new Child();
p.setChild(child);
child.setParent(p);
save(p);
附注。 将@JoinColumn(name = "fk_parent_id", nullable = false)
与@ManyToOne
注释一起使用是一种很好的做法。 这将在设置值时停止错误,这导致您在尝试检索时未命中。
所有实体都需要有一个@Id
字段和一个空的构造函数。
如果您使用自定义 sql 脚本来初始化您的数据库,您需要在匹配外键的每个字段上添加注释@JoinColumn
:
例子 :
class Parent {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
public Parent() {}
/* Getters & Setters */
}
class Child {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
/* name="<tablename>_<column>" */
@JoinColumn(name="Parent_id", referencedColumnName="id")
private int foreignParentKey;
public Child () {}
}
fetch=FetchType.LAZY
您的收藏尚未加载,交易已结束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.