2011-03-12 15 views
0

我寫一個web的應用程序,其中一些標識將在URL的用戶可以看到相關實體。該應用程序旨在供更多擁有每個帳戶的用戶使用。一個賬戶然後可以有項目,每個項目都有任務。現在可擴展的順序號生成器使用@TableGenerator

,我不想讓用戶擁有他們的第一個項目與24876的ID(或任何一個正常生成的ID會)創建的,而是有一個「好看」的順序標識符另外到生成的主鍵(主要是因爲操作具有非複合標識符的實體更簡單)。我們稱這些順序ID爲viewIds。

ViewIDs將在1對每個不同的「父」的標識符開始(爲一個項目,這將是一個帳戶)。該組合(帳戶,projectViewId)是獨一無二的,以及(專案編號,taskViewId)等

我的問題是:如何產生這些viewIds?我正在考慮使用TableGenerator機制,但是這個機制也可以用於非標識符列嗎?

最重要的是,在多個應用程序服務器使用相同數據庫的環境中生成此類標識的最佳方法是什麼(並且理想情況下不需要直接與eachother進行通信)?是否可能已經實現了TableGenerator或實現上述功能的實用程序?

回答

0

還好吧,這是我最終採用的解決方案:

,而不是依賴休眠/ JPA管理這些「好看」的ID,我選擇了一個基於數據庫的方法:

  • 對於有一個viewId每個實體,我定義一個觸發器,它會增加它在每次插入,基於元素的一個序列中的最大值(例如,所有任務的項目22)
  • 我也有一個多唯一鍵約束( project_id,naturalId)用於像Task這樣的實體。

有一兩件事我不知道的是如何做到這一點表現在如數據庫的master-to-master複製,其中可以使用兩個數據庫服務器。但對於應用程序服務器複製,這應該可以完成這項工作