JPA多选

Dra*_*gos 1 jpa criteria

我使用EclipseLink作为JPA提供程序.

我想进行查询以获取IDs与在线一个Criteria查询对应的所有名称.

Root<UserAccount> root = criteria.from(UserAccount.class);
List<Selection<?>> select = new ArrayList<Selection<?>>();
    for (MyElement element : list) {
   Expression<String> firstName = root.get("firstName");
   Expression<String> lastName = root.get("lastName");
   Expression<Integer> id = root.get("id");
   select.add(criteria
                .multiselect(
                        firstName.alias(element.getId() + "_"
                                + element.getEntity() + "f"),
                        lastName.alias(element.getId() + "_"
                                + element.getEntity() + "l"))
                .where(criteriaBuilder.equal(id, element.getAuthorId()))
                .from(UserAccount.class)
                .alias(element.getId() + "_" + element.getEntity()));
}
criteria.multiselect(select);
TypedQuery<Tuple> q = em.createQuery(criteria);
for (Tuple t : q.getResultList()) {
        for (OverviewEntity element : list) {
 System.out.println("////"
                        + t.get(element.getId().toString() + "_"+element.getEntity()+"f",
                                String.class));
Run Code Online (Sandbox Code Playgroud)

通过element.getId() + "_" + element.getEntity() + "f"我打算创建一个唯一的别名.

问题是,我得到的只是null.为什么?我应该如何在一个查询中获取所有这些(以便它不会变得耗时)?

Jam*_*mes 8

你的代码看起来很困惑而且过于复杂.

JPQL

Select u.firstName, u.lastName, u.id from UserAccount u where u.id in (:ids)
Run Code Online (Sandbox Code Playgroud)

似乎工作,

在标准中,这是,

Root<UserAccount> root = criteria.from(UserAccount.class);
criteria.multiselect(root.get("firstName"), root.get("lastName"), root.get("id"));
criteria.where(criteriaBuilder.in(root.get("id"), criteriaBuilder.parameter("ids"));
Run Code Online (Sandbox Code Playgroud)