Сопоставление типа данных метки времени с Postgres в запросеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Сопоставление типа данных метки времени с Postgres в запросе

Сообщение Anonymous »

У меня проблема, возможно кто-то сталкивался с этим, я не могу сделать запрос, который корректно работает с null.
У меня в базе данных есть сущность с полем 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;

И у меня также есть SQL-запрос, который выбирает все объекты, у которых есть обновленное поле между переданными параметрами, и фильтрует по статусу

Код: Выделить всё

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
);
}
Здесь у меня идет поиск сущностей из базы данных, для которых поле UpdateAt находится в переданном диапазоне и в переданных данных статуса.
Это все работает корректно, но у меня требование
проверки на ноль для параметров «от» и «до».
У меня есть такая проверка для параметра «Статус»
А если здесь передать ноль
то эта фильтрация не работает и все сущности с разными статусы отображаются.
Но если вы добавите одинаковую проверку для полей «Куда» и «От»

Код: Выделить всё

@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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»