我有以下实体 任务类型 字符串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包含数千条记录时,“合理”吗?有人可以告诉我一些 示例代码? 谢谢, 佛瑞德
答案 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查询差。