Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Spring数据JPA避免了多对一关系中的多个选择_Spring_Hibernate_Jpa_Orm_Spring Data Jpa - Fatal编程技术网

Spring数据JPA避免了多对一关系中的多个选择

Spring数据JPA避免了多对一关系中的多个选择,spring,hibernate,jpa,orm,spring-data-jpa,Spring,Hibernate,Jpa,Orm,Spring Data Jpa,我使用的是SpringDataJPA,并且使用hibernate实现了从子类到父类的多对一关系。我正在编写一个搜索API,它将使用一些子表列搜索子表,并返回子对象列表以及每个子对象的父类中的一些数据。默认情况下,我正在进行多对一关系的急切获取。我面临的问题是,在搜索子表后,返回10个条目,然后hibernate对父类执行10个不同的select查询,以获取每个子对象的父对象。有没有办法优化这一点?对于类似的问题有一个解决方案,但它适用于一对多的情况。我在网上也找不到任何有帮助的东西。有什么想法吗

我使用的是SpringDataJPA,并且使用hibernate实现了从子类到父类的多对一关系。我正在编写一个搜索API,它将使用一些子表列搜索子表,并返回子对象列表以及每个子对象的父类中的一些数据。默认情况下,我正在进行多对一关系的急切获取。我面临的问题是,在搜索子表后,返回10个条目,然后hibernate对父类执行10个不同的select查询,以获取每个子对象的父对象。有没有办法优化这一点?对于类似的问题有一个解决方案,但它适用于一对多的情况。我在网上也找不到任何有帮助的东西。有什么想法吗?

由于您在问题中没有显示任何代码,所以解决它有点困难,但我认为如果您指定
连接列
@JoinColumn
注释)并在
父类
中使用
@OneToMany
注释(指定
获取
类型)和
@ManyToOne
您不应该有任何问题:

@Entity(name ="Parent")
public class Parent {
    @Id
    @Column
    private int id;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name= "paren_id")
    private Set<Child> children;
    //getters and setters
}

@Entity(name ="Child")
public class Child{
    @Id
    @Column
    private int id;

    @ManyToOne
    private Parent parent;

    //getters and setters
}
@Entity(name=“Parent”)
公共类父类{
@身份证
@纵队
私有int-id;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name=“paren\u id”)
私人儿童;
//接球手和接球手
}
@实体(name=“Child”)
公营儿童{
@身份证
@纵队
私有int-id;
@许多酮
私人家长;
//接球手和接球手
}

我假设:你在接孩子。子实体由类中的父实体定义。父级是通过即时抓取定义的。考虑到这一点:您是说Hibernate正在创建多个SELECT语句(每个加载的子项一个)来检索父项?如果我是你,我会验证这一点……如果这是真的,我只会为hibernate配置缓存。它不必这样做。我会花一分钟时间来阅读文档。