加載實體工作,我通過鑰匙或ID用於加載和存儲實體簡單的一層,我只是加入緩存到這一層。當具有給定密鑰的實體在緩存中時,返回它而不是從數據存儲中獲取。當實體更新並保存到數據存儲區時,層簡單地將緩存中的實體設置爲null。它是完全透明的。GAE,JDO:從緩存
這似乎是工作正常,但是從緩存中獲取的對象是從對象從數據庫中獲取略有不同。例如,有些東西停止工作,我不能在集合實體內使用.contains()來檢查兩個實體之間是否存在關係。我也遇到了一個奇怪的行爲,當我從緩存中加載對象並立即在存儲到數據存儲之後,代表關係的集合中的所有項目都被替換爲null
s。但我無法複製它。現在它工作正常。
我不知道什麼是引擎蓋下發生的,所以問題是,與高速緩存可靠這種工作方式?我能像使用從數據存儲中獲取的實體一樣處理從緩存中獲取的實體(訪問子代,更新,刪除...)嗎?
感謝解釋如何'Collection.contains(對象)'的作品,我知道對象得到初始化/反序列化,但我不知道這會導致此問題。還有其他事情要注意嗎?爲了重複我原來的問題,除了這個(自然也就是實體可能已經過期),我可以像使用數據存儲區一樣使用緩存實體嗎? – tobik 2012-08-17 16:56:22
本例中的實體是POJO,對吧?那麼是的,如果你確保他們正確序列化,你可以像使用數據存儲一樣使用它們。但要小心比較它們的解釋。 – 2012-08-17 19:22:23
是的,他們是。使用@PersistenceCapable註釋提升簡單類。所以這是個好消息,謝謝。正如你所建議的那樣,我重寫了equals()和hashCode()方法,所以現在我可以按照我想要的方式比較它們。 – tobik 2012-08-18 08:07:22