0

现在,我正在使用 CriteriaQuery 的方法 multiselect 将实体 Termine 的一些值放入实体 Task 中,如下所示:

CriteriaBuilder builder = getEm().getCriteriaBuilder();
        CriteriaQuery<Task> taskCriteria = builder.createQuery(Task.class);
        Root<Termin> terminRoot = taskCriteria.from(Termin.class);
        taskCriteria.multiselect(terminRoot.get("text"), terminRoot.get("empfaenger"), terminRoot.get("datVon"));
        taskCriteria.where(builder.equal(terminRoot.get("empfaenger"), "000"));
        List<Task> task = getEm().createQuery(taskCriteria).getResultList();
        return task;

这工作正常,但现在我愿意不仅从实体 Termine 还从实体 Aufgabe 收集值 text、empfaenger 和 datVon,这样我将有一个包含每个 Termin 和 Aufgabe 的任务列表拥有相同的empfaenger。

可能吗?如果是,如何?

非常感谢您的帮助!

4

2 回答 2

1

我会从任务派生这两个类。

@Entity(name="Task")
@Inheritance(strategy = InheritanceType.JOINED)
@NamedQuery(name="Task.findAll", query="SELECT t FROM Task t") 
public class Task {

    @Id
    Long id;

    String text;

    String empfaenger;
}

@Entity
public class Termin extends Task{
    ...
}

@Entity
public class Aufgabe extends Task{
    ...
}

并使用命名查询选择它们

List<Task> resultList = entityManager.createNamedQuery("Task.findAll",Task.class).getResultList();

或以任务为根的条件查询。

于 2017-01-05T19:20:01.197 回答
0

这是我从多个实体(自定义 Select)收集数据的方式。例如,多个实体:

Root<InflowEntity> rootInflow = criteriaQuery.from(InflowEntity.class);
Root<OutflowEntity> rootOutflow = criteriaQuery.from(OutflowEntity.class);

您从上述2中选择您需要的属性:

criteriaQuery.multiselect(rootInflow.get("inflowID"), rootInflow.get("name"),
rootOutflow.get("count"), rootOutflow.get("dateRange"));

添加您需要的谓词(约束),例如:

Predicate[] predicates = new Predicate[2];
predicates[0] = criteriaBuilder.equal(rootInflow.get("uuid"), loginContext.getUuid());
predicates[1] = criteriaBuilder.equal(rootOutflow.get("uuid"), loginContext.getUuid()); 

处理结果:

criteriaQuery.where(predicates);                        
List<ResultsBean> results = session.createQuery(criteriaQuery).getResultList();

这个 Java bean(这不是 Hibernate 实体ResultsBean存储结果。也就是说,它需要有一个构造函数来适应多选排列方式的输入。

于 2019-06-25T21:22:56.110 回答