我在我的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。有没有一种方法来改变手动计数功能或方言,将解决这个问题
1条答案
按热度按时间fdbelqdn1#
就是这样例如,基于Scott的员工样本表:
我能数出不同的部门号码:
但是,我不能计算部门和工作的组合(基本上,这就是你所做的和你得到的错误):
一种变通方法是,连接列。为了避免错误的结果(因为如果你连接12和345你得到12345;如果你把1234和5连接起来,你会得到同样的结果),把字符-这在两列中都不存在,比如我的例子中的#):
我不知道你使用的工具,所以我不能建议确切的代码,但我希望我上面写的有意义,你将能够使用它。