Spring Boot 2.x 到 3.x 迁移后,@Query 中出现 Hibernate Unsupported tuple Comparison Combination 错误

问题描述 投票:0回答:1

我已从 Spring Boot

2.7
迁移到
3.2.2
,并在 2.7 中工作的存储库之一上使用以下方法。

@Query(
    """
        SELECT new com.domain.services.resources.repository.AllocationChainResult(\
        aca.allocationChain.id, aca.allocationChain.name, aca.referencedEntityId, aca.referencedEntityType, \
        aca.referencedRestrictionEntityId, aca.referencedRestrictionEntityType, aca.timeModel.id) \
        FROM AllocationChainAssignment AS aca \
        WHERE aca.referencedEntityId IN :refEntityIds \
        AND aca.deleted = 'active' \
        AND ((aca.timeModel = null) \
        OR (EXISTS \
        (SELECT tma.timeModelId FROM TimeModelAvailability AS tma \
        WHERE tma.timeModelId = aca.timeModel.id \
        AND tma.timeFrom <= :timestamp \
        AND tma.timeTo > :timestamp)))\
        """
)
List<AllocationChainResult> findUsingReferencedEntityIds(
    @Param("refEntityIds") Set<String> entityIds,
    @Param("timestamp") Long timestamp
);

老实说,我不知道要更改/修复什么,因为该错误消息不是很有帮助。

Caused by: java.lang.IllegalStateException: Unsupported tuple comparison combination. LHS is neither a tuple nor a tuple subquery but RHS is a tuple: org.hibernate.sql.ast.tree.predicate.ComparisonPredicate@76dba376
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitRelationalPredicate(AbstractSqlAstTranslator.java:7750)
    at org.hibernate.sql.ast.tree.predicate.ComparisonPredicate.accept(ComparisonPredicate.java:60)
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitGroupedPredicate(AbstractSqlAstTranslator.java:6952)
    at org.hibernate.sql.ast.tree.predicate.GroupedPredicate.accept(GroupedPredicate.java:33)
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitJunctionPredicate(AbstractSqlAstTranslator.java:7348)
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitJunction(AbstractSqlAstTranslator.java:7326)
    at org.hibernate.sql.ast.tree.predicate.Junction.accept(Junction.java:76)
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitGroupedPredicate(AbstractSqlAstTranslator.java:6952)
    at org.hibernate.sql.ast.tree.predicate.GroupedPredicate.accept(GroupedPredicate.java:33)
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitJunctionPredicate(AbstractSqlAstTranslator.java:7348)
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitJunction(AbstractSqlAstTranslator.java:7329)
    at org.hibernate.sql.ast.tree.predicate.Junction.accept(Junction.java:76)
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitWhereClause(AbstractSqlAstTranslator.java:3236)
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitQuerySpec(AbstractSqlAstTranslator.java:3182)
    at org.hibernate.sql.ast.tree.select.QuerySpec.accept(QuerySpec.java:119)
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitSelectStatement(AbstractSqlAstTranslator.java:998)
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.translateSelect(AbstractSqlAstTranslator.java:861)
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.translate(AbstractSqlAstTranslator.java:811)
    at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.buildCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:430)
    at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:324)
    at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:300)
    at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:509)
    at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:427)
    at org.hibernate.query.Query.getResultList(Query.java:120)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:129)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:92)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:149)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:137)

有人知道错误是什么吗?

spring spring-boot hibernate spring-data-jpa
1个回答
0
投票

我也遇到了同样的错误,发现它是由

= null
引起的。 将其替换为
is null
解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.