У меня в базе данных есть сущность с полем 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
);
}
Это все работает корректно, но у меня требование
проверки на ноль для параметров «от» и «до».
У меня есть такая проверка для параметра «Статус»
А если здесь передать ноль
то эта фильтрация не работает и все сущности с разными статусы отображаются.
Но если вы добавите одинаковую проверку для полей «Куда» и «От»
Код: Выделить всё
@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-postgress-in-a-query[/url]
Мобильная версия