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
Spring boot 使用JPA/JPQL,是否可以手动加载和实体及其OneToMany关联?_Spring Boot_Jpa_Spring Data Jpa_Jpql - Fatal编程技术网

Spring boot 使用JPA/JPQL,是否可以手动加载和实体及其OneToMany关联?

Spring boot 使用JPA/JPQL,是否可以手动加载和实体及其OneToMany关联?,spring-boot,jpa,spring-data-jpa,jpql,Spring Boot,Jpa,Spring Data Jpa,Jpql,假设我有两个实体,Parent和Child,其中父实体包含1..n个子实体: @实体 @数据@noargsconstuctor 公共类父类{ @Id@GeneratedValue 私人长id; 私有字符串基本; 私有字符串细节; @OneToMany(fetch=FetchType.EAGER) private Set children=new HashSet(); 公共父项(字符串基本、字符串详细信息、设置子项){…} } @实体 @数据@noargsconstuctor 公营儿童{ @身份

假设我有两个实体,
Parent
Child
,其中父实体包含1..n个子实体:

@实体
@数据@noargsconstuctor
公共类父类{
@Id@GeneratedValue
私人长id;
私有字符串基本;
私有字符串细节;
@OneToMany(fetch=FetchType.EAGER)
private Set children=new HashSet();
公共父项(字符串基本、字符串详细信息、设置子项){…}
}
@实体
@数据@noargsconstuctor
公营儿童{
@身份证
@GeneratedValue(策略=GenerationType.TABLE)
私人长id;
私有字符串基本;
私有字符串细节;
公共子项(字符串基本、字符串详细){…}
}
我可以使用JpaRepository加载父实体:

public接口ParentRepository扩展了JpaRepository{}
//在控制器或服务中
List parents=parentRepository.findAll();
我正在尝试使用投影。出于这个原因,我想知道是否可以手动加载带有查询的父对象,以便只加载所需的数据。在一个完美的世界中,这可能看起来像这样:

//Dtos,父级和子级都不需要字符串详细信息
@价值观
公共类ParentDto{
长id;
基本字符串;
收集儿童;
公共ParentDto(长id、字符串basic、集合子项){…}
}
@价值观
公营儿童{
长id;
基本字符串;
公共childTo(长id,字符串基本){…}
}

public接口ParentRepository扩展了JpaRepository{
//投影-*不工作*,这是我想要的
@查询(“从父p选择p.id、p.basic、p.children.id、p.children.basic”)
列出findAllProjected();
}
这显然是失败的,因为它将把所有的父母和他们的孩子连接起来,导致父母的数量*他们的孩子的数量。ParentDto需要一个construstor
public ParentDto(long id,String basic,childto child){…}
,因此每个父对象有n个ParentDto,其中n是父对象的子对象数

我是否必须手动按父Id对行进行分组,并将childTo收集在一起?我可以使用subselect解决这个问题吗?我知道Jpa通过选择父对象并为每个父对象执行1次选择,获取它们的子对象(当我使用自动生成的存储库方法时),解决了这个问题。我真的希望投影/视图会容易得多,因为它们是我和很多其他应用程序的基本要求。必须始终加载所有数据,只加载所需的数据,但不加载它们的关联,或者必须手动加载每个实体的关联,这看起来像一个缓冲器

注意:我尝试过InterfaceProjection,但不想使用它,因为它只在序列化为json时加载所有数据并剥离不必要的部分

谢谢你的问候