JPA java Oracle 12 c Dialect distinct specification复合键不起作用ORA-00909

9rnv2umw  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(92)

我在我的projekt实体与复合键。当我尝试使用方法时

Page<T> findAll(@Nullable Specification<T> spec, Pageable pageable);

一切工作的罚款,但当我添加线与不同的规格

public Predicate toPredicate(Root<NotificationSettingsFrontend> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
        query.distinct(true);

我得到错误

Caused by: Error : 909, Position : 16, Sql = select distinct count(distinct notificati0_.business_rules_id, notificati0_.notification_config_id) as col_0_0_ from notifications.notification_config_front notificati0_ where 1=1, OriginalSql = select distinct count(distinct notificati0_.business_rules_id, notificati0_.notification_config_id) as col_0_0_ from notifications.notification_config_front notificati0_ where 1=1, Error Msg = ORA-00909: incorrect number of arguments

所以Hibernate生成了错误SQL查询,因为计数器有2个ID的复合键。i使用org.hibernate.dialect.Oracle12cDialect,Oracle10gDialect也是如此。我试图在甲骨文找到一个解决方案,但是我在任何地方都找不到这个问题的解决方案,我指出我不能从代码中删除distinct。有没有一种方法来改变手动计数功能或方言,将解决这个问题

fdbelqdn

fdbelqdn1#

就是这样例如,基于Scott的员工样本表:

SQL> select deptno, ename, job from emp order by deptno, job;

    DEPTNO ENAME      JOB
---------- ---------- ---------
        10 MILLER     CLERK
        10 CLARK      MANAGER
        10 KING       PRESIDENT
        20 SCOTT      ANALYST
        20 FORD       ANALYST
        20 ADAMS      CLERK
        20 SMITH      CLERK
        20 JONES      MANAGER
        30 JAMES      CLERK
        30 BLAKE      MANAGER
        30 MARTIN     SALESMAN
        30 WARD       SALESMAN
        30 ALLEN      SALESMAN
        30 TURNER     SALESMAN

14 rows selected.

我能数出不同的部门号码:

SQL> select count(distinct deptno) from emp;

COUNT(DISTINCTDEPTNO)
---------------------
                    3

但是,我不能计算部门和工作的组合(基本上,这就是你所做的和你得到的错误):

SQL> select count(Distinct deptno, job) from emp;
select count(Distinct deptno, job) from emp
       *
ERROR at line 1:
ORA-00909: invalid number of arguments

一种变通方法是,连接列。为了避免错误的结果(因为如果你连接12和345你得到12345;如果你把1234和5连接起来,你会得到同样的结果),把字符-这在两列中都不存在,比如我的例子中的#):

SQL> select count(distinct deptno ||'#'|| job) from emp;

COUNT(DISTINCTDEPTNO||'#'||JOB)
-------------------------------
                              9

我不知道你使用的工具,所以我不能建议确切的代码,但我希望我上面写的有意义,你将能够使用它。

相关问题