Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA:获取双向多对一关系_Java_Jpa_Orm_Jpql_Datanucleus - Fatal编程技术网

Java JPA:获取双向多对一关系

Java JPA:获取双向多对一关系,java,jpa,orm,jpql,datanucleus,Java,Jpa,Orm,Jpql,Datanucleus,我是JPA/JPQL的初学者,当我使关系具有双向性时,我在获取多对一关系方面遇到了问题。以下是JPQL: select c from Child c join fetch c.parent 以下是两个简单的类: @Entity public class Parent { @Id private int id; private String title; @OneToMany(mappedBy = "parent") private Set<Ch

我是JPA/JPQL的初学者,当我使关系具有双向性时,我在获取多对一关系方面遇到了问题。以下是JPQL:

select c from Child c join fetch c.parent
以下是两个简单的类:

@Entity
public class Parent {
    @Id
    private int id;

    private String title;

    @OneToMany(mappedBy = "parent")
    private Set<Child> children;
}
@Entity
public class Child {

    @Id
    private int id;

    @ManyToOne(fetch = FetchType.LAZY)
    private Parent parent;

}
现在,如果我完全删除父级中对“children”的引用,那么SQL正是我所需要的:

SELECT 'com.*.Child' AS NUCLEUS_TYPE,`C`.`ID`,`B0`.`ID`,`B0`.`TITLE` FROM `CHILD` `C` INNER JOIN `PARENT` `B0` ON `C`.`PARENT_ID` = `B0`.`ID`

需要明确的是:我试图实现的是用我的JPQL查询获取孩子的父母

更新:我刚刚用EclipseLink尝试了这两个类,效果很好,所以看起来这个问题是Datanucleus特有的

  • 您需要
    @JoinColumn
    来创建双向关系:

    @manytone(fetch=FetchType.LAZY) @JoinColumn(name=“parent\u id”) 私人家长

  • 如果您正在使用JPA注释,则从子c中选择c,然后对数据库中的对象使用
    Child.getParent()


  • 您需要在子类中使用@JoinColumn并尝试此操作

    家长:

    @OneToMany(targetEntity = Child.class, fetch = FetchType.EAGER, mappedBy = "parent", cascade=CascadeType.ALL)
    
    儿童:

    @ManyToOne(targetEntity=Parent.class, fetch = FetchType.EAGER, cascade=CascadeType.ALL)
    @JoinColumn(name="id", nullable = false)
    

    当您从父表中获取数据时,它将自动包含集合“children”中的子表中的关联数据,这是一个Datanucleus错误。它已在datanucleus-rdbms-3.2.6中修复。这是修复程序的提交:


    如果您只想要父对象,并且您有了子对象,您可以从父对象p中说
    ,其中p.id=:parent_id
    我希望子对象和父对象在一个查询/事务中完成。我正在寻找一种方法,在一个查询中获取子对象及其父对象,即作为联接。你在第2点中建议的解决方案执行两个单独的查询。这没有什么区别。我不知道为什么它没有做任何更改,但我已经尝试过这样做,它对我有效。
    @ManyToOne(targetEntity=Parent.class, fetch = FetchType.EAGER, cascade=CascadeType.ALL)
    @JoinColumn(name="id", nullable = false)