2012-08-14 87 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)"); 
相關問題