如何通过字符串集合值查询实体 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
之后过滤 SystemLogEntity
。 Predicate
这甚至可能吗?
我希望这会奏效:
Specification<SystemLogEntity> stacktraceLike(String stacktrace) {
return (root, query, cb) -> cb.like(root.join("stacktrace"), "%" + stacktrace + "%");
}
更多examples...
我有以下实体:
@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
之后过滤 SystemLogEntity
。 Predicate
这甚至可能吗?
我希望这会奏效:
Specification<SystemLogEntity> stacktraceLike(String stacktrace) {
return (root, query, cb) -> cb.like(root.join("stacktrace"), "%" + stacktrace + "%");
}
更多examples...