java - JPA findby 过滤子字符串列表

标签 java jpa spring-data-jpa

所以我知道我可以过滤

  • 使用 findByProperty 获取 JPA 中的特定属性。
  • 以及 Set 中类的属性(属性:父级中的 classset)以及 findByClassset_Property

但是如果我有一组字符串,我该如何过滤呢? 我无法在一组字符串上使用 _Property,因为字符串没有属性?

假设我有以下实体:

@Entity(name = "mine")
public class MyEntity extends AbstractBaseEntity {

    @Column(name = "something")
    private String something;

    @ElementCollection (fetch = FetchType.EAGER)
    private Set<Anotherclass> colorlist;

    @ElementCollection (fetch = FetchType.EAGER)
    private Set<String> mylist;

}

另一个类以 String 作为属性:

public class Anotherclass  {

     String color;

}

这是我的存储库:

@Repository
public interface MyEntityRepository extends JpaRepository<RisikoEntity, Long> {

    List<MyEntity> findBySomethingContainsIgnoreCase(String filterstring); // works as expected

    List<MyEntity> findByColorlist_ColorIgnoreCase(String filterstring); // works as expected

    List<MyEntity> findByMylistContainsIgnoreCase(String filterstring); // does not work - returns no matches

}

最佳答案

所以,正如 Java 聊天室中向我解释的那样 -

in relational or tabular databases, a collection of primitives does not exist. Arrays, maps, sets, trees, etc do not exist as values, the only thing that exists are sets of entities and those entities could have a single string column. But you would have to make an entity defining that column

因此,它要么使用包含字符串的单个列构建一个实体,然后对其进行过滤(就像我已经对具有单个字符串属性 color 的类 Anotherclass 所做的那样)从上面)。

或者使用@Query,如下所示:

@Query (value = "SELECT * from myentity e " +
" left join myentity_mylist l ON e.id = l.myentity_id " +
" WHERE lower(l.mylist) LIKE CONCAT('%',:filtertext,'%')  ", nativeQuery = true)
List<MyEntity> findbyCustomFiltering(@Param("filtertext") String filterstring_lowercase);

关于java - JPA findby 过滤子字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61271305/

相关文章:

java - 如何将手机中的联系人导入到 Gmail 帐户

java:获取Guava Multimap给定键范围内的值的计数

java - Hibernate JDBC 批量大小不起作用

java - 自动配置数据源失败 : 'spring.datasource.url' is not specified

mysql - 数据类型 blob mysql

java - 如何在 Java Spring 中的不同请求中使用 SET 的同一实例

仅使用一个扫描仪的 java.util.NoSuchElementException

java - 监视 Java Hibernate 数据检索

java - 努力在 JPQL 中转换左连接查询

java - CascadeType.ALL 和 "insertable = false, updatable = false"是否相互排除?