2012-04-18 22 views
0

在Hibernate和Ehcache中使用可變ID是否安全?另請注意,hashCode基於該ID。使用Hibernate和Ehcache可變ID是否安全?

class Company implements Serializable { 
    String code; // PK 
    public int hashCode() { 
    return code == null ? 17 : code.hashCode(); 
    } 
    public boolean equals(Object o) { 
    // Some obvious equals checking for type and field equality 
    } 
} 

回答

3

之間存在業務鍵代理鍵概念的區別。通常,ID意味着一個不可變的標識符(代理鍵),它沒有商業意義。在數據庫級別,相應的列將是主鍵,以便可以通過其他表中的外鍵引用它以確保參照完整性。模型ID的實體屬性通常是Long類型的。 它的值被賦值一次,永不改變。

業務關鍵可能包含一個或多個實體屬性(因此可能是可變的),它們可以是可變的。

問題片段中提供的字段code(應該是私有的)是業務密鑰。所以,它可以根據需要進行更改。雖然實體類型缺少ID字段。

2

這可能不是一個好主意。 (它表明您打算使用業務密鑰(代碼)作爲對象的主鍵,如果您的流程要求您可以更改或重新分配密鑰,這可能會導致併發症。)

但是, (至少在Hibernate的情況下)取決於如何,然後「代碼」字段發生了變化。如果你在一個對象的代碼持久化之後改變它的代碼,你將會破壞內存和數據庫中的副本之間的關係,並且會發生不好的事情。

另一個值得關注的問題是,如果「代碼」字段在對象處於HashMapHashSet中時發生更改,則對象或條目可能會丟失。

相關問題