JPA 条件查询组(按仅使用 ID)
2022-09-04 02:26:45
这是一个示例实体:
public class Account{
@Id
Long id
Double remaining;
@ManyToOne
AccountType type
}
public class AccountType{
@Id
Long id;
String name;
}
现在我创建一个条件查询,将 Join 作为 follwing:
CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
CriteriaQuery criteriaQuery = criteriaBuilder.createquery();
Root<Account> accountRoot = criteriaQuery.from(Account.class);
Join<Account, AccountType> typeJoin = accountRoot.join(Account_.type);
criteriaQuery.multiSelect(
typeJoin,
criteriaBuilder.sum(accountRoot.get(Account_.remaining))
);
criteriaQuery.groupBy(typeJoin);
Query query = getEntityManager().createQuery(criteriaQuery);
query.getResultList();
上面的代码生成 Sql 命令,如下所示:
select accType.id, accType.name, sum(acc.remaining)
from account acc join accType on acc.accounttype_id = accType.id
group by accType.id
上面的代码在PosgreSQL中工作,但不能在Oracle中运行,因为在其中选择不出现在group by子句中的 accType.name。
更新:
我认为我的问题对你来说不清楚。我的问题不是关于 PostgreSQL 或 Oracle 在 .我的问题是这样的:
我使用在子句中(这意味着我希望休眠使用帐户类型中的所有字段),但是为什么休眠只使用身份字段?如果我只使用标识字段,那么我可以使用以下语句:group by
typeJoin
group by
group by
group by
group by
criteriaQuery.groupBy(typeJoin.get(AccountType_.id)) ;