Проблема с использованием Oracle Tunc + NumtodsInterval в критерии JPA?JAVA

Программисты JAVA общаются здесь
Anonymous
Проблема с использованием Oracle Tunc + NumtodsInterval в критерии JPA?

Сообщение Anonymous »

Я пытаюсь воспроизвести следующее выражение Oracle SQL внутри критериализации JPA с использованием CriteriaBuilder (Hibernate + Oracle DB): < /p>

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

TRUNC(tktworkdate - NUMTODSINTERVAL(4, 'HOUR'))< /code> < /p>
В основном:
Вычтите 4 часа из столбца временной метки (tktworkdate)
усечь результат до ближайшего дня.public static Specification betweenWorkDate(LocalDate from, LocalDate to, String offset) {
return (root, query, cb) -> {
Expression workDate = root.get("tktWorkDate"); // Assuming tktWorkDate is the field
Expression intervalExpr = cb.function("NUMTODSINTERVAL",
Object.class,
cb.literal(-Integer.parseInt(offset)),
cb.literal("HOUR"));
Expression datePlusInterval = cb.function(
"+",
Object.class,
workDate,
intervalExpr
);
Expression truncatedDate = cb.function(
"TRUNC",
Date.class,
cb.function(
"(" + workDate.getAlias() + " + ?)",
Date.class,
intervalExpr
)
);

// Convert LocalDate to java.util.Date
Date fromDate = Date.from(from.atStartOfDay(ZoneId.systemDefault()).toInstant());
Date toDate = Date.from(to.atStartOfDay(ZoneId.systemDefault()).toInstant());

// Return the between predicate
return cb.between(truncatedDate, fromDate, toDate);
};
}
Но Hibernate выбрасывает ошибки, такие как:
Parameter 1 of function 'trunc()' has type 'NUMERIC',
but argument is of type 'java.sql.Timestamp' mapped to 'TIMESTAMP'
< /code>
Я попытался использовать ниже подходы: < /p>
  • Использование cb.function (" +",…) → неудача, потому что + не является действительной функцией SQL. правильно.


Подробнее здесь: https://stackoverflow.com/questions/797 ... riabuilder

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