Hibernate方法只返回指定列中的值已更改的记录

时间:2012-02-01 13:18:16

标签: java sql database hibernate criteria

表:Profile

pk   fk fname lname  dob         ssn        createDate  ModifyDate
1    22 bob   smith  01/02/1978  123456789  01/27/2012  null
2    22 bob   smith  01/02/1978  987654321  01/27/2012  01/28/2012
3    22 bob   smith  04/02/1944  123456789  01/27/2012  01/29/2012
4    22 bob   dole   04/02/1944  123456789  01/27/2012  01/30/2012
5    22 bob   dole   02/12/1913  123456789  01/27/2012  01/31/2012
6    22 john  dole   02/12/1913  123456789  01/27/2012  02/02/2012
7    22 bob   dole   11/22/1994  123456789  01/27/2012  02/03/2012

我想返回最后三次dob已更改为fk = 22

这将返回记录7,6,4。

所以我可以这样做:

Integer foreignKey = new Integer(22);
Criteria criteria = session.createCriteria(Profile.class);
List results = criteria.add(Restrictions.eq("fk",foreignKey))
  .addOrder( Order.desc("ModifyDate") ).list();

现在我知道我可以编写一个for循环并比较dob以查看哪些日期已更改。

但是有没有hibernate方法或更简单的方法来做到这一点?

如果我想查看dobfname是否会发生变化,那该怎么办?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可能需要查看Hibernate Envers,但我认为您不能使用它自动执行此类查询。 Afaik你只有两种可能性来实现这个目标:

  1. 创建适当的查询(Criteria,HQL,SQL)以检索相应记录或加载整个历史记录并识别Java代码中的记录。
  2. 扩展历史记录表和触发器(或hibernate事件侦听器)以包含已更改的属性/列的名称。可能每个属性/列都有一个额外的布尔列。通过这种方式,您可以非常有效地查询相关记录。