Java JPA-一对一关系不加载子对象
我试图配置这个@OneToMany和@manytone关系,但它根本不起作用,不知道为什么。我以前在其他项目上也这样做过,但不知何故,它与我当前的配置不兼容,下面是代码:Java JPA-一对一关系不加载子对象,java,jpa-2.0,eclipselink,one-to-many,many-to-one,Java,Jpa 2.0,Eclipselink,One To Many,Many To One,我试图配置这个@OneToMany和@manytone关系,但它根本不起作用,不知道为什么。我以前在其他项目上也这样做过,但不知何故,它与我当前的配置不兼容,下面是代码: public class Parent { @OneToMany(mappedBy = "ex", fetch= FetchType.LAZY, cascade=CascadeType.ALL) private List<Child> myChilds; public List<Child
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;
}
}
为什么?fetch=FetchType.LAZY
您的集合未加载,事务已结束。问题很可能在于您的保存,因为您不能在要保存的子对象中设置父对象引用,也不能使用检索或实体映射本身。 这可以从数据库行确认,该行在子表的外键列中必须为null。e、 g.妥善保存
Parent p = new Parent();
Child child = new Child();
p.setChild(child);
child.setParent(p);
save(p);
PS.最好将
@JoinColumn(name=“fk\u parent\u id”,nullable=false)
与@manytone
注释一起使用。这将在设置值时停止错误,该值在您尝试检索时导致未命中。所有实体都需要有@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 () {}
}
类父类{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私有int-id;
公共父项(){}
/*接球手和接球手*/
}
班童{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私有int-id;
/*name=“\”*/
@JoinColumn(name=“Parent\u id”,referencedColumnName=“id”)
私钥;
公共子对象(){}
}
您不需要输入列名吗?什么列名?你能说得更具体一点吗?你是在为你们的关系设定双方吗?MyChilds只有在添加了条目,或者父实体从dbHi Chris刷新时才会有条目,谢谢您的消息。是的,这就是重点,我使用em.find
从数据库加载父级,但仍然得到相同的结果(没有)。这是错误的。如果你调用#getFoo,JPA应该加载它,因为是你要求的。
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 () {}
}