Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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 Spring JPA存储库从对象集合访问字段_Java_Spring Data Jpa - Fatal编程技术网

Java Spring JPA存储库从对象集合访问字段

Java Spring JPA存储库从对象集合访问字段,java,spring-data-jpa,Java,Spring Data Jpa,我有下一个实体: public class Person { private String name; private int age; private Address address; } 我正在使用SpringJPA存储库来查询数据库。因此,我有一个列表要从数据库中检索。下一个查询正在运行: List<Person> findByNameAndAge(String name, int age); List findByNameAndAge(字符串名,int-age

我有下一个实体:

public class Person {
  private String name;
  private int age;
  private Address address;
}
我正在使用SpringJPA存储库来查询数据库。因此,我有一个
列表要从数据库中检索。下一个查询正在运行:

List<Person> findByNameAndAge(String name, int age);
List findByNameAndAge(字符串名,int-age);
我要做的是传递整个
列表
,不多次调用前面的方法,只需在一次调用中查询数据库。大概是这样的:

@Query("SELECT p FROM Person p WHERE (p.name, p.int) IN (:list.name, :list.int)")
List<Person> findByNameAndAge(@Param("list") List<Person> personList);
@Query(“从(:list.name,:list.int)中的(p.name,p.int)个人p中选择p”)
List findByNameAndAge(@Param(“List”)List personList);

根据评论中的讨论,我理解您希望生成的查询如下:

@Query("SELECT p FROM Person p WHERE (p.name, p.int) IN (:list.name, :list.int)")
List<Person> findByNameAndAge(@Param("list") List<Person> personList);
从人员p中选择p
其中(p.name,p.int)在(:p.name1,:p.age1),(:p.name2,:p.age2),…)
我认为有一种简单的方法:

@Query(“从个人p中选择p,其中(:params)中的(p.name,p.age)”)
List findByNameAndAge(@Param(“params”)List params);
其中,
params
元组的列表

param[0] = name1, param[1] = age1,
param[0] = name2, param[1] = age2,
..

请尝试一下,让我知道这是否适合您。

根据评论中的讨论,我理解您希望生成的查询如下:

@Query("SELECT p FROM Person p WHERE (p.name, p.int) IN (:list.name, :list.int)")
List<Person> findByNameAndAge(@Param("list") List<Person> personList);
从人员p中选择p
其中(p.name,p.int)在(:p.name1,:p.age1),(:p.name2,:p.age2),…)
我认为有一种简单的方法:

@Query(“从个人p中选择p,其中(:params)中的(p.name,p.age)”)
List findByNameAndAge(@Param(“params”)List params);
其中,
params
元组的列表

param[0] = name1, param[1] = age1,
param[0] = name2, param[1] = age2,
..


请尝试一下,让我知道这是否适合您。

为什么不发送两个集合名称和INT而不是人员列表?我认为您在
@query
中的查询并不是您真正想要做的。你的目标是什么:1。让人们用名字X或名字M或年龄Y或年龄N等等。。。2.让人们用(名字X和年龄Y)或(名字M和年龄N)等等。。。您的查询版本将执行第一步,而不是第二步second@YCF_L我试过了,但没有达到预期效果,因为如果我通过例如
姓名[“Joe”,“Jane”]年龄[22,25]
,假设数据库包含两个Joe,一个22岁,另一个25岁,我只想找回22岁的人。@Sindbad90我想找回拥有(name=x,age=y)(name=a,age=b)的人,依此类推,你提到的第二点。@YCF_L是的,但我真正需要知道的是,如果有办法从参数中的对象集合通过查询方法访问对象字段,为什么不发送两个集合名称和整数而不是人员列表?我认为您在
@query
中的查询并不是您真正想要做的。你的目标是什么:1。让人们用名字X或名字M或年龄Y或年龄N等等。。。2.让人们用(名字X和年龄Y)或(名字M和年龄N)等等。。。您的查询版本将执行第一步,而不是第二步second@YCF_L我试过了,但没有达到预期效果,因为如果我通过例如
姓名[“Joe”,“Jane”]年龄[22,25]
,假设数据库包含两个Joe,一个22岁,另一个25岁,我只想找回22岁的人。@Sindbad90我想找回拥有(name=x,age=y)(name=a,age=b)的人,依此类推,你提到的第二点。@YCF_L是的,但我真正需要知道的是,如果有一种方法可以从参数中的对象集合中的查询方法访问对象字段,我尝试了这种方法,但是在我的例子中,这种方法存在一个巨大的问题。如何创建不同类型的元组?在我的真实场景中,我需要一个
[String,biginger]
的元组好的,是的,我错过了。再说一次,我不确定这一点,但你能试试列表吗?有一个演示项目,你可以与上面的设置共享哦,男孩,我希望我可以共享该项目,但是,这是一个私人项目:(如果您使用的是H2,我们使用
List
的方法可能会因为缺少对“In子句”的支持而失败在多个列上。我可能错了,但这是可能的。我尝试过,但在我的案例中,这种方法存在一个巨大的问题。如何创建不同类型的元组?在我的真实案例场景中,我需要一个
[String,biginger]的元组
好的,是的,我错过了。再说一遍,我不确定这一点,但你能试试列表吗?确实有一个演示项目,你可以与上面的设置共享哦,男孩,我希望我可以共享该项目,但是,这是一个私人项目。:(如果你使用H2,我们使用
列表的方法可能会失败,因为缺少对多栏中的“in子句”。我可能在这里错了,但这是可能的。