簡體   English   中英

Hibernate二級緩存——同一個實體的多個對象

[英]Hibernate second level cache - multiple objects of the same entity

我需要確保只創建同一實體的一個對象(就像使用一級休眠緩存加載數據時所做的那樣,以簡化實體刷新)並且我想使用二級緩存。

我正在測試 ehcache,但無法使其正常工作。 通常,我的應用程序中的實體嵌套在其他實體中,但這只是一個簡單的用法示例:

a) 使用一級緩存的示例,該緩存工作正常:

 session = HibernateUtil.getSessionFactory().openSession();
 transaction = session.getTransaction();
 transaction.begin();
 Person person=session.get(Person.class, 1L);
 Person person2=session.get(Person.class, 1L);
 transaction.commit();
 session.close();

 System.out.println(person2 == person);

它返回真

b) 在 Ehcache 中使用二級緩存

//1. load person with id 1
session = HibernateUtil.getSessionFactory().openSession();
transaction = session.getTransaction();
transaction.begin();
Person person=session.get(Person.class, 1L);
transaction.commit();
session.close();

//2. load the same person
session = HibernateUtil.getSessionFactory().openSession();
transaction = session.getTransaction();
transaction.begin();
Person person2=session.get(Person.class, 1L);
transaction.commit();
session.close();

System.out.println(person2 == person);

它返回false

二級緩存的正常行為是這樣還是我錯過了什么? 任何二級緩存引擎是否只保留同一實體的一個實例(如一級緩存所做的那樣)?

這不可能使用二級緩存在 Hibernate 的 RAM 中保留實體的一個實例,因為每次 Hibernate 在緩存中找到它時,它只會根據緩存的數據創建新實例。

出於我的目的,我實現了基於 AVL 樹的加載實體和數據庫同步引擎,該引擎基於從休眠中加載的實體創建存儲庫,並異步搜索實體中的所有字段並重寫/合並所有相同的字段(以便如果某些字段(pk ) 與存儲庫中的實體相同,它取代了它)

通過這種方式,與數據庫的同步很容易,因為它可以在存儲庫中找到外部更改的實體(因此基本上在 O(log n) 的 AVL 樹中)並重寫其字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM