使用来自两个实体的限制的Hibernate标准,同时返回两者的值

时间:2011-12-05 18:56:27

标签: 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;    // 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条件对象内部我希望能够使用Task和TaskJBPM实体的属性设置限制 (例如,criteria.add(Restrictions.eq(“status”,“created”),       criteria.add(Restrictions.eq(“name”,“example”);)。

此外,我还想返回Task和TaskJBPM表的所有属性(也可能是TaskType和TaskQueue中的属性)。两个问题。这是否可以使用休眠标准对象,并且性能将是如此 当Task和TaskJBPM包含数千条记录时,“合理”吗?有人可以告诉我一些 示例代码? 谢谢, 佛瑞德

1 个答案:

答案 0 :(得分:0)

只有正确设计实体才有可能。这意味着Task实体不应该有masterTaskId,taskQueueId和taskTypeId,但有三个(我想)ManyToOne关联:

@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查询差。