使用复合键(长,日期)选择最新的对象的休眠查询

Posted

技术标签:

【中文标题】使用复合键(长,日期)选择最新的对象的休眠查询【英文标题】:Hibernate query for object with composite key (long, date) selecting latest 【发布时间】:2012-09-05 14:08:27 【问题描述】:

假设我的数据库中有这样的东西(摘要)

MyTable 
  Long ID Primary Key NOT NULL,
  Date ValidFrom Primary Key NOT NULL,
  Date ValidTo

基本上是一个在 ID 和 ValidFrom 上具有复合主键的实体。现在我有一些日期范围,例如 2012-09-01 -> 2012-09-30。

我的问题是:我可以进行智能休眠查询,它在重复的 ID 上,但不同的 ValidFrom 键,返回这个最新日期?

例如数据:

Row 1 
  Long ID = 1,
  Date ValidFrom 2012-09-01,
  Date ValidTo 2012-09-15 


Row2 
  Long ID = 2,
  Date ValidFrom 2012-09-01,
  Date ValidTo 2012-09-15 


Row3 
  Long ID = 1,
  Date ValidFrom 2012-09-16,
  Date ValidTo null

选择给定日期 (2012-09-01 -> 2012-09-30) 之间的那些行将仅返回 Row2 和 Row3(因为 Row1 和 Row3 具有相同的 ID,所以我们得到最新的)。

是否有任何查询(标准 API?)或者我需要获取所有条目,然后使用某种方法进行过滤?

【问题讨论】:

【参考方案1】:

我通过请求 are Rows 来结束它,然后使用最新的

Collections.max(...)

带日期比较器

【讨论】:

以上是关于使用复合键(长,日期)选择最新的对象的休眠查询的主要内容,如果未能解决你的问题,请参考以下文章

休眠 - 使用包含父 ID 的复合键 - OneToMany

在休眠中使用复合键

为啥在休眠中不鼓励复合键?

使用复合键 (EJB) 的命名查询

如何使用注释创建休眠复合键

没有复合键的休眠中的多对多