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

У меня есть следующие объекты 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 (например, crit.add (Restrictions.eq ("status"), "созданный"), crit.add (Restrictions.eq ("имя", "пример");).

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

1 Ответ

0 голосов
/ 06 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...