JPQL org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:第1行附近的并集

时间:2018-06-28 18:30:37

标签: hibernate spring-data-jpa

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface SearchRepository extends 
         PagingAndSortingRepository<CPAttribute, Long>
{
    @Query("select cpa.cpAttributeId from CPAttribute cpa " +
    " union " +
    " select cps.cpGroupId from CustPro cps")
    Page<CustProProjection> findBySerial(Pageable pageable);
}

我正在尝试使用spring数据JPQL自定义查询联合运算符从两个不同的表中获取数据集。它是一个弹簧启动应用程序,用于调用存储库代码。上面显示的代码可以编译,但是在运行服务器时会出现错误

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: union near line 1
java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: union near line 1.

Jars used:
spring-data-jpa-2.0.6.RELEASE.jar
spring-data-commons-2.0.6.RELEASE.jar
spring-orm-5.0.5.RELEASE.jar

代码为联合运算符引发错误。有人可以建议如何解决此错误吗?

1 个答案:

答案 0 :(得分:1)

正如 ali akbar azizkhani 在评论中写道:JPQL中没有UNION关键字。直接的方法是改为使用本机SQL语句。

或者,可以将两个查询到的实体变成一个类型层次结构,并通过查询超类型获得相似的结果。 尽管总的来说,我还是建议不要依赖继承,因为它会带来相当大的额外复杂性。