java jpa id_JPA Criteria查询组仅使用id

这是一个示例实体:

public class Account{

@Id

Long id

Double remaining;

@ManyToOne

AccountType type

}

public class AccountType{

@Id

Long id;

String name;

}

现在我使用Join创建一个条件查询,如下所示:

CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();

CriteriaQuery criteriaQuery = criteriaBuilder.createquery();

Root accountRoot = criteriaQuery.from(Account.class);

Join 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 .

update :

我认为我的问题不是't clear for you. My question isn' t关于PostgreSQL或_2730113中的Oracle行为 . 我的问题是:

我在 group by 子句中使用 typeJoin (这意味着我希望hibernate在 group by 中使用AccountType的所有字段),但为什么hibernate只使用 group by 上的标识字段?如果我在 group by 中只使用身份字段,那么我可以使用以下语句:

criteriaQuery.groupBy(typeJoin.get(AccountType_.id)) ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JPA中,我们可以使用Criteria API来实现复杂/多条件组合的分页查询。 首先,我们需要创建一个CriteriaBuilder对象,它可以帮助我们构建查询条件和排序规则。然后,我们可以通过调用CriteriaBuilder的createQuery方法来创建查询对象,并指定查询的返回结果类型。接下来,我们需要创建一个Root对象,它表示我们要查询的实体类,并以此为基础构建查询的条件和排序规则。 对于多条件组合查询,我们可以使用Predicate对象来表示不同的查询条件,然后使用CriteriaQuery对象的where方法来添加这些条件。例如,假设我们要查询年龄大于20且性别为女性的用户,我们可以使用如下代码来添加条件: ```java CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<User> query = criteriaBuilder.createQuery(User.class); Root<User> userRoot = query.from(User.class); Predicate agePredicate = criteriaBuilder.greaterThan(userRoot.get("age"), 20); Predicate genderPredicate = criteriaBuilder.equal(userRoot.get("gender"), "女性"); query.where(criteriaBuilder.and(agePredicate, genderPredicate)); ``` 如果我们还需要对查询结果进行分页,我们可以使用CriteriaQuery对象的setFirstResult和setMaxResults方法来设置查询的起始位置和返回的最大记录数。例如,如果我们要查询第一页的10条记录,我们可以使用如下代码: ```java int pageNumber = 1; int pageSize = 10; query.setFirstResult((pageNumber - 1) * pageSize); query.setMaxResults(pageSize); ``` 最后,我们可以通过调用EntityManager的createQuery方法来执行查询,并获取结果集。例如,我们可以使用以下代码来执行查询: ```java TypedQuery<User> typedQuery = entityManager.createQuery(query); List<User> userList = typedQuery.getResultList(); ``` 以上就是使用JPA实现复杂/多条件组合分页查询的基本步骤。通过使用Criteria API,我们可以灵活地构建查询条件和排序规则,实现个性化的查询需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值