У меня есть сущность в базе данных с столбцом updateAt .
Код: Выделить всё
@Data
@Entity
@Accessors(chain = true)
@Table(name = "entity")
@TypeDefs({
@TypeDef(name = "ENUM", typeClass = PostgreSQLEnumType.class),
@TypeDef(name = "DURATION", typeClass = PostgreSQLIntervalType.class)
})
public class EntityTypeMetaData implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@UpdateTimestamp
@Column(name = "updated_at", nullable = false)
private Date updatedAt;
@Column(name = "status", nullable = false)
@Enumerated(EnumType.STRING)
private TemplateStatus status;
Код: Выделить всё
public interface JpaEntityTypeMetadataRepository extends JpaRepository {
@Query("""
SELECT em FROM EntityTypeMetaData em
WHERE (:states IS NULL OR em.status IN :states)
AND (em.updatedAt BETWEEN :from AND :to)
""")
Page findTemplatesByStatusAndUpdatePeriod(
@Param("states") List states,
@Param("from") Date from,
@Param("to") Date to,
Pageable pageable
);
}
Все работает корректно, но у меня есть требование проверки на нулевое значение для параметров «от» и «до».
У меня есть такая проверка для параметра «Статус».
И если здесь передано значение null, то эта фильтрация выполняется не работает, и отображаются все объекты с разными статусами.
Но если вы добавите одну и ту же проверку для столбцов «от» и «от»:
Код: Выделить всё
@Query("""
SELECT em FROM EntityTypeMetaData em
WHERE (:states IS NULL OR em.status IN :states)
AND (:from IS NULL OR em.updatedAt >= :from)
AND (:to IS NULL OR em.updatedAt
Подробнее здесь: [url]https://stackoverflow.com/questions/79230173/mapping-the-timestamp-data-type-to-postgresql-in-a-query[/url]
Мобильная версия