使用Hibernate条件和来自两个实体的限制,同时从两个实体返回值
我有以下实体 任务类型 字符串id; 字符串名; 字符串描述;使用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
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查询差