Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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 从@ElementCollection中搜索对象_Java_Spring_Jpa_Spring Data Jpa - Fatal编程技术网

Java 从@ElementCollection中搜索对象

Java 从@ElementCollection中搜索对象,java,spring,jpa,spring-data-jpa,Java,Spring,Jpa,Spring Data Jpa,我使用的是Spring数据JPA 我是这样一个实体 public class A { @CollectionTable(name = "B_ITEMS", joinColumns = @JoinColumn(name = "B_ID")) @ElementCollection private List<B> bs; } 如何使用contents@ElementCollection B搜索实体A 这是我的存储库Spring数据JPA存储库 public i

我使用的是Spring数据JPA

我是这样一个实体

public class A {

    @CollectionTable(name = "B_ITEMS", joinColumns = @JoinColumn(name = "B_ID"))
    @ElementCollection
    private List<B> bs;

}
如何使用contents@ElementCollection B搜索实体A

这是我的存储库Spring数据JPA存储库

public interface ARepo extends PagingAndSortingRepository<Clinic, Long> {

}
公共接口ARepo扩展了分页和排序存储库{
}

什么查询方法名称适用于我的用例?

您似乎要求在Spring数据中进行基本的IN查询-
findBybsIn(列表bs)
@ElementCollection
只是映射
@OneToMany
关系的一种简单方法

因此,您可以像往常一样加入他们:

public interface ARepo extends PagingAndSortingRepository<A, Long> {
    @Query("select a from A a join a.bs b where b.prop1 = :prop1 and ...")
    A findByProps(@Param("prop1") String prop1)
}
公共接口ARepo扩展了分页和排序存储库{
@查询(“从a中选择a并加入a.bs b,其中b.prop1=:prop1和…”)
findByProps(@Param(“prop1”)字符串prop1)
}

除了在@Zeromus answer中使用@Query之外,您还可以通过方法名称(findByElementCollectionProperty\u NestedProperty)来定义它:


公共接口ARepo扩展了JPARepository

一种方法是在a对象列表中搜索B对象的所有属性。这意味着同时使用prop1、prop2和prop3的过滤器

public interface ARepo extends PagingAndSortingRepository<Clinic, Long> {
    List<A> findByBsProp1AndBsProp2AndBsProp3(String prop1, String prop2, String prop3); 
}
公共接口ARepo扩展了分页和排序存储库{
列出FindBySprop1、BSProp2和BSProp3(字符串prop1、字符串prop2、字符串prop3);
}

这是一个基于@Embeddeble object的所有3个属性的findby。因此,如果我需要在A列表中搜索特定对象B,我可以使用此方法并筛选所有属性,这意味着对对象本身进行筛选。虽然此代码可以解决问题,但最好添加详细说明,并向可能不理解此代码的人解释其工作原理。感谢您的反馈。另外,如果我已经在评论中解释过,我试图改进答案,如果Bs不是一个可嵌入的集合,而是一个简单字符串的集合,那么这个方法会是什么样子?比如,我想知道一个特定的字符串参数是否与elementcollection中的字符串匹配。然后,该方法是如下所示:
findByBsIn(String arg)
,还是应该有所不同?
public interface ARepo extends JPARepository<A,Long> {

    List<A> findByBs_Prop1(String prop1);
}
public interface ARepo extends PagingAndSortingRepository<Clinic, Long> {
    List<A> findByBsProp1AndBsProp2AndBsProp3(String prop1, String prop2, String prop3); 
}