使用Hibernate条件和来自两个实体的限制,同时从两个实体返回值

使用Hibernate条件和来自两个实体的限制,同时从两个实体返回值,hibernate,hibernate-criteria,Hibernate,Hibernate Criteria,我有以下实体 任务类型 字符串id; 字符串名; 字符串描述; TaskQueue String id; String name; ... TaskJBPM long id; String description; String status; String assignedToUser; int Priority; ... Task String id; String name; long masterTaskId; // L

我有以下实体 任务类型 字符串id; 字符串名; 字符串描述;

TaskQueue
  String id;
  String name;
  ...

TaskJBPM
  long id;
  String description;
  String status;
  String assignedToUser;
      int Priority;
  ...

Task
  String id;
  String name;
  long masterTaskId;    // Link to TaskJBPM table
  Date expectedStart;
  Date expectedEnd
  Date scheduledStart;
  Date scheduledEnd;
  String taskQueueId;    // Link to the TaskQueue table
  String taskTypeId;     // Link to the TaskType table
  ...
在hibernate criteria对象中,我希望能够使用Task和TaskJBPM实体的属性设置限制 例如:criteria.addRestrictions.eqstatus,已创建, criteria.addRestrictions.eqname,示例

另外,我想返回Task和TaskJBPM表的所有属性,也可能返回TaskType和TaskQueue中的属性。两个问题。使用hibernate criteria对象是否可以实现这一点,性能是否会有所提高 当Task和TaskJBPM包含数千条记录时“合理”?有人能给我看看吗 示例代码? 谢谢
Fred

只有正确设计实体才能实现。这意味着任务实体不应具有masterTaskId、taskQueueId和taskTypeId,而应具有三个(我想是多个)关联:

@ManyToOne
@JoinColumn(name = "MASTER_TASK_ID")
private TaskJBPM masterTask;

@ManyToOne
@JoinColumn(name = "TASK_QUEUE_ID")
private TaskQueue taskQueue;

@ManyToOne
@JoinColumn(name = "TASK_TYPE_ID")
private TaskType taskType;
然后,您将能够在条件查询中使用createAlias或createCriteria连接关联,并使用投影从所有实体检索属性

条件查询将转换为SQL。它的性能不会比您自己创建的SQL查询差