Использование критериев Hibernate с ограничениями от двух сущностей, также возвращая значения от обоих

У меня есть следующие сущности TaskType String 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
  ...

Внутри объекта критериев гибернации я хотел бы иметь возможность устанавливать ограничения, используя атрибуты как из объектов Task, так и из TaskJBPM (например. eq("имя", "пример");).

Кроме того, я хотел бы вернуть все атрибуты для таблиц Task и TaskJBPM (и, возможно, также атрибуты из TaskType и TaskQueue). Два вопроса. Возможно ли это с использованием объекта критериев гибернации и будет ли производительность «разумной», когда Task и TaskJBPM содержат тысячи записей? Может ли кто-нибудь показать мне пример кода? Спасибо, Фред


person Fred Altman    schedule 05.12.2011    source источник


Ответы (1)


Это будет возможно только в том случае, если вы правильно спроектируете свои сущности. Это означает, что объект 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-запрос, который вы бы создали сами.

person JB Nizet    schedule 05.12.2011