2012-08-14 63 views
0

我尝试查找插入到表中的最后一个元素。hibernate查找表中最后一个元素的问题

我试图把它写这样的:

m_query = m_session.createQuery("LAST(bankAccount) FROM AccountStatus"); 

需要的记录的名称的BankAccount和表的名称是AccountStatus

我应该如何正确地写呢?

感谢了很多,

P.S

这是一个Hibernate查询

礼在关系模型

+0

怎么办你的意思是最后? – 2012-08-14 08:38:12

+0

如果您的数据应记录更改的历史记录,请考虑将Hibernate Envers这一捆绑在Hibernate中的模块(自3.5或3.6开始)。这是在不同时间存储数据并在特定时间查询的方式。 – 2012-08-14 08:40:03

回答

1

“表” 已设置的语义。没有“最后”元素,排序可以是任意的。您需要为插入日期引入排序标准,如时间戳。有不同的可能的实现。您可以通过简单的只读(对于用户而不是Hibernate!)字段在Java对象模型上执行此操作,该字段通过数据库级​​别的触发器或Hibernate生命周期侦听器初始化为当前时间。然后,您可以轻松获取具有最新插入日期的实体。

1

如果你有你的表ID可以通过最大ID

m_query = m_session.createQuery("max(id) FROM AccountStatus"); 
+1

这只会返回AccountStatus表的最大ID。要返回LAST(bankAccount),您必须使用子查询 – andih 2012-08-14 08:42:22

+1

'm_query = m_session.createQuery(“a.bankAccount FROM AccountStatus a where a.id =(从AccountStatus中选择max(id))”);'或' m_query = m_session.createQuery(“a.bankAccount FROM AccountStatus按a.id desc limit 1排序”);' – ssedano 2012-08-14 08:45:00

+0

只有在确保id是连续的时才有效。如果db为事务保留并释放id的块(如MSSQL可以),它将不起作用。 – 2012-08-14 08:47:12

0

找到最后一个元素,如果存在在你的表的自动增量ID列,你也可以使用:

m_query = m_session.createQuery("a1.bankAccount FROM AccountStatus a1 where not exists (a2.bankAccount FROM AccountStatus a2 where a2.id>a1.id)");