当前位置: 首页 > 知识库问答 >
问题:

JPA findby筛选字符串的子列表

郎恺
2023-03-14

所以我知道我可以过滤

  • JPA中具有findByProperty的特定属性

但是如果我有一组字符串,我如何过滤呢?我不能对一组字符串使用\u属性,因为字符串没有属性?

假设我有以下实体:

@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;

}

和另一个属性为字符串的类:

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

}

共有1个答案

赖杰
2023-03-14

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

在关系数据库或表格数据库中,不存在基元集合。数组、映射、集、树等不作为值存在,唯一存在的是实体集,这些实体可以有一个字符串列。但您必须创建一个实体来定义该列

因此,它要么使用包含String的单个列构建一个Entity,然后过滤它(就像我已经使用上面的单个String属性Color对Classantherclass所做的那样)。

或使用@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);
 类似资料:
  • 我试图根据某个字符串是否是列中值的子字符串来对dataframe应用筛选器。 例如:让我们调用子字符串'x',我想检索所有行,其中'x'是名为'a'的列中值的子字符串。 或者这个: 或者类似的东西。有没有人对我如何实现这一点有个想法?

  • 我想从包含单词Evil(filterString)的数组中删除一些元素。 以下是我从原始阵列(来宾)获得的信息: 只希望客人数组更新一旦所需的字符串(邪恶)被过滤。

  • 我有一个形式的字典: 我想过滤列表,以删除索引中的每一项,其中索引中的不是 输出应如下所示: 因为的第一个值不是 我试过这样的方法: 但这只适用于一把钥匙。 回复:下面有很多好的解决方案。我只是在想另一个。 将这个列表结构转换成一个元组列表: 然后我只需要通过每个元组的第二个项目来过滤这个列表,这很容易:

  • 我有一个返回字符串[][]的方法,如下所示: 我做错了什么?

  • 本文向大家介绍在 JavaScript 中包含唯一字符的筛选字符串,包括了在 JavaScript 中包含唯一字符的筛选字符串的使用技巧和注意事项,需要的朋友参考一下 问题 我们需要编写一个 JavaScript 函数来接受一个字符串 str。我们的函数应该构造一个只包含输入字符串中唯一字符的新字符串,并删除出现的所有重复字符。 示例 以下是代码- 输出结果 以下是控制台输出-

  • 问题内容: 我有一个清单 我正在尝试删除其超字符串已经在列表中的字符串。在这种情况下,结果应为: 我已经写了代码: 但它似乎不起作用。我读过,我们无法在列表上进行迭代时将其删除。因此,副本,而这是我的原始列表。 问题答案: l=[‘abc’,’abcdef’,’def’,’defdef’,’polopolo’] print [j for i, j in enumerate(l) if all(j