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
代码为联合运算符引发错误。有人可以建议如何解决此错误吗?
答案 0 :(得分:1)
正如 ali akbar azizkhani 在评论中写道:JPQL中没有UNION
关键字。直接的方法是改为使用本机SQL语句。
或者,可以将两个查询到的实体变成一个类型层次结构,并通过查询超类型获得相似的结果。 尽管总的来说,我还是建议不要依赖继承,因为它会带来相当大的额外复杂性。