首页 文章

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

提问于
浏览
0

我有以下实体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
  ...

在hibernate条件对象内部,我希望能够使用来自Task和TaskJBPM实体的属性设置限制(例如,criteria.add(Restrictions.eq(“status”,“created”),criteria.add(Restrictions . eq(“name”,“example”);) .

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

1 回答

  • 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查询差 .

相关问题