小编Jan*_*ana的帖子

Hibernate 6 SQLFunctionTemplate 替代方案

我们有 HibernateMetadataBuilderContributor 如下所示。它适用于 Hibernate 5 或 Spring boot 2.7。但当我们迁移到 Hibernate 6 或 Spring boot 3 时就不起作用了。

public class HibernateMetadataBuilderContributor implements MetadataBuilderContributor {

    public static final String STRING_AGG = "string_agg";
    public static final String STRING_AGG_ORDER_BY = "string_agg_order_by";
    public static final String STRING_AGG_DISTINCT = "string_agg_distinct";

    @Override
    public void contribute(final MetadataBuilder metadataBuilder) {
        metadataBuilder.applySqlFunction(STRING_AGG, new SQLFunctionTemplate(StandardBasicTypes.STRING, "string_agg(?1, ?2)"));
        metadataBuilder.applySqlFunction(STRING_AGG_ORDER_BY, new SQLFunctionTemplate(StandardBasicTypes.STRING, "string_agg(?1, ?2 order by ?3)"));
        metadataBuilder.applySqlFunction(STRING_AGG_DISTINCT, new SQLFunctionTemplate(StandardBasicTypes.STRING, "string_agg(distinct ?1, ?2)"));

    }
}
Run Code Online (Sandbox Code Playgroud)

在 Hibernate 6 中找不到 SQLFunctionTemplate,有什么替代方案吗?

hibernate hibernate-criteria spring-data spring-data-jpa spring-boot

6
推荐指数
1
解决办法
3388
查看次数

Hibernate 6 错误:已经注册了一个副本:SqmBasicValuedSimplePath(completelyqualifiedclass.name)

当尝试使用现有条件复制计数的 Critria 构建器时。在 Hibernate 6 中似乎出现以下错误,但在 Hibernate 5 中似乎同样有效。

引起原因:java.lang.IllegalArgumentException:已经注册了一个副本:

SqmBasicValuedSimplePath(com.example.domain.Test(175781908930100).name)
Run Code Online (Sandbox Code Playgroud)

添加完整代码。

public static <Q, R> Page<Q> getResultsPage(final EntityManager entityManager, final CriteriaQuery<Q> criteria, final Root<R> root, final Pageable pageable,
            final List<Order> defaultOrderList) {
        return PageableExecutionUtils.getPage(getResultList(entityManager, criteria, root, pageable, defaultOrderList), pageable, () -> count(entityManager, criteria));
    }


public static <Q, R> List<Q> getResultList(final EntityManager entityManager, final CriteriaQuery<Q> criteria, final Root<R> root, final Pageable pageable,
            final List<Order> defaultOrderList) {
        CriteriaUtils.setOrderBy(entityManager, criteria, root, pageable, defaultOrderList);
        TypedQuery<Q> resultQuery = entityManager.createQuery(criteria);
        if (Objects.nonNull(pageable) && pageable.isPaged()) { …
Run Code Online (Sandbox Code Playgroud)

java hibernate spring-data-jpa spring-boot hibernate-6.x

5
推荐指数
1
解决办法
4538
查看次数

Hibernate 6 错误 InvalidDataAccessApiUsageException:非法 pop() 与不匹配的 JdbcValuesSourceProcessingState

在 Hibernate 6 中调用 JPA 方法时经常出现以下错误

org.springframework.dao.InvalidDataAccessApiUsageException:非法 pop() 与 org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:368) 处不匹配的 JdbcValuesSourceProcessingState

java hibernate hibernate-criteria spring-data-jpa spring-boot

5
推荐指数
1
解决办法
6811
查看次数