2012-10-01 37 views
0

我需要保持任意順序的某些對象(由用戶指定,隨意),但我不知道哪個是最好的方法。如何在Hibernate和/或分佈式環境中訂購對象?

我一直在考慮在我的實體中設置一個整數次序字段,並讓用戶排序,但這種方法困擾我,因爲我們有3個服務器調度請求,我相信如果我更新數據庫中的順序,我每次想根據該順序進行計算時更新/合併我的實體。

另一種方法將使用國際海運危險貨物,或者一個緩存設置在這些計算的共享位置和查詢等位置順序,但我相信這將是矯枉過正了這樣的任務。

這將是最好的方法?還是其他?

回答

1

具有整數順序列的方法是一種可能性。然後您還可以在數據庫中添加一個版本列(可能您已經有一個版本),並且當有一個用戶更改訂單時,必須保存包含新訂單編號的所有記錄。由於版本列,其他用戶得到通知,他們必須重新加載他們的數據,因爲修改後的訂單。您也可以使用小數點後的某些數字或一個字符串(而不是整數)來代替整數,這兩種方法都可以更容易地僅更新那些在順序中確實具有新位置的行,而不是更新表中的所有行。

這種方法的不便之處在於,用戶必須重新加載行(這意味着他要重新做他的實際修改)僅僅是因爲不同的用戶的順序改變了。如果這種情況很少發生,你可以忍受它,但如果順序的變化經常發生,這可能是不可接受的。

爲了避免這種不便,你只能爲訂單創建一個單獨的表(如列訂單號,您的數據表的關鍵和版本列)。該表與數據表有1:1的關係。當訂單發生變化時,只有這張表必須更新,這意味着其他用戶在修改任何記錄的數據時不會受到干擾。在這種情況下,您甚至可以實現不同的訂單(例如,每個用戶都可以定義自己的訂單) - 這會將與數據表的關係從1:1更改爲n:1。

共享位置緩存我,如果有性能問題,不僅會做,或者沒有必要堅持一個訂單到數據庫(爲了只爲一個會話有效)。

0

我不確定是否正確理解問題。如果不同的用戶可以定義他自己的訂單,那麼訂單應該以某種方式轉到用戶的個人資料中,它可以是分開的表格或字段。

你爲什麼要用戶特定的信息添加到您的實體表?或者我誤解了這個問題?