Как запросить сущности по их значениям коллекции строк 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
s для фильтрации моих запросов в БД:
@Repository
public interface SystemLogRepository extends JpaRepository<SystemLogEntity, Long>, JpaSpecificationExecutor<SystemLogEntity> {
public List<SystemLogEntity> findAll(Specification spec);
}
Для простого поля SystemLogEntity
это отлично работает, Predicate
прямо вперед.
Также, если я отфильтрую для точного элемента в коллекции, Predicate
все еще прямо вперед (in
).
Но как я могу отфильтровать SystemLogEntity
после элемента коллекции трассировки стека, который LIKE
данное значение?
Другими словами, я хотел бы, например, фильтровать SystemLogEntity
после срока NullpointerException
, Это возможно даже с Predicate
?
1 ответ
Решение
Я надеюсь, что это будет работать:
Specification<SystemLogEntity> stacktraceLike(String stacktrace) {
return (root, query, cb) -> cb.like(root.join("stacktrace"), "%" + stacktrace + "%");
}
Больше примеров...