Java JPA-一对一关系不加载子对象

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

我试图配置这个@OneToMany和@manytone关系,但它根本不起作用,不知道为什么。我以前在其他项目上也这样做过,但不知何故,它与我当前的配置不兼容,下面是代码:

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 () {}
}