Постоянство Jakarta 3.1.0 против 3.2.0 — предикат спецификации «like» кажется неработающим после обновленияJAVA

Программисты JAVA общаются здесь
Anonymous
Постоянство Jakarta 3.1.0 против 3.2.0 — предикат спецификации «like» кажется неработающим после обновления

Сообщение Anonymous »

Я переношу веб-приложение с Spring Boot 3.5.10 на 4.0.5.
Зависимость персистентности Jakarta, предоставляемая Spring, изменяется с версии 3.1.0 на версию 3.2.0.
В базе кода используется ряд предикатов персистентности для поиска в репозиториях Spring, а также довольно много спецификаций LIKE, созданных программным способом.
Например, для простой сущности:

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

@Entity
@Table(name = TABLE_NAME)
public class MyEntity {

static final String TABLE_NAME = "MY_TABLE";
static final String COL_NAME_FOO = "foo";
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = COL_NAME_FOO)
private String foo;

}
(с сгенерированной метамоделью MyEntity_ и именем поля MyEntity_.FOO)
... и репозиторий JPA, похожий на:

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

interface MyEntityRepository extends JpaRepository,
JpaSpecificationExecutor {

}
Представьте таблицу со строкой, например:



id
foo




1
bar



... и следующая спецификация «нравится»:

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

Specification byFoo() {
return (root, query, cb) -> cb.like(
root.get(MyEntity_.FOO),
Specifications.like("bar"));
}
--> когда предикат, полученный из этой спецификации, используется в качестве параметра для вызова findAll в репозитории, это правильно извлекает объект, десериализованный из единственной строки таблицы (1, «bar») в Spring boot 3.5.10/jakarta-persistence 3.1.0.
например. myRepository.findAll(byFoo().toPredicate(root,query,cb))
К сожалению, те же самые условия и идиома перестали работать с Spring boot 4 / jakarta-persistence 3.2.0, а вызов findAll, параметризованный с той же спецификацией -> предикат, не может получить одну строку.
Я не нашел ни одной литература предупреждает о потенциальных ошибках или соответствующих синтаксических изменениях.
Есть ли какое-либо обоснование для этого / может быть, стоит попробовать альтернативную идиому?
Примечание: я просмотрел сгенерированный подготовленный оператор и не увидел существенных отличий - единственное отличие заключается в том, что версия 3.2.0 добавляет escape '' в конце запроса.

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