如何通过字符串集合值查询实体 LIKE

How to query for entities by their string collection values LIKE

我有以下实体:

@Entity
public class SystemLogEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    private long creationTime;
    private String thread;
    private int severity;
    @Lob
    private String message;
    @ElementCollection(fetch = FetchType.EAGER)
    @Lob
    private List<String> stacktrace;

    ...
}

我的 Respository 实现了 JpaSpecificationExecutor,它允许我使用 Specification 来过滤我的数据库请求:

@Repository
public interface SystemLogRepository extends JpaRepository<SystemLogEntity, Long>, JpaSpecificationExecutor<SystemLogEntity> {

     public List<SystemLogEntity> findAll(Specification spec);
}

对于 SystemLogEntity 的简单字段,这工作正常,Predicate 是直截了当的。

此外,如果我过滤集合中的确切项目,Predicate 仍然是直接的 (in)。

但是如何在 LIKE 给定值的堆栈跟踪收集项之后过滤我的 SystemLogEntity

换句话说,我会,例如喜欢在术语 NullpointerException 之后过滤 SystemLogEntityPredicate 这甚至可能吗?

我希望这会奏效:

Specification<SystemLogEntity> stacktraceLike(String stacktrace) {
    return (root, query, cb) -> cb.like(root.join("stacktrace"), "%" + stacktrace + "%");
}

更多examples...