2013-03-12 70 views
2

我有一個問題,我有一個表有PersonIDPID)列的數量。型號JPA一對多沒有實際的父實體

我想將這些實體掛起使用PID作爲外鍵使用JPA一對多集合並使用EhCache進行高速緩存目的的父實體。

聽起來很簡單,麻煩的是我沒有父母實體!我沒有父母的原因是我們正在撰寫報告申請,而我們正在使用PID來寫筆記。

我不是真的想創建一個新表,只是爲JPA和EhCache配置存儲PID

我想知道我是否可以模仿一個實體或類似的東西,但對於所有的搜索我畫空白。

+0

你能加樣的一些例子你想運行的查詢? – sharakan 2013-03-12 18:39:15

+0

我希望能夠擁有一組與每個PID相關的筆記和事件。 – SimonF 2013-03-13 14:18:14

+0

因此,在一個查詢中,獲取包含對共享PID的所有Note實體和Event實體的引用的對象? – sharakan 2013-03-13 14:25:01

回答

0

沒有'虛擬'實體或類似的東西,所以你不能單獨在Hibernate中做你想要的。

我建議,雖然簡單地做它的代碼,在一個抽象層(DAO爲Person類,基本上)兩個查詢的頂部,這樣的:

private static Person lookupPerson(Session s, int pid) { 
    List<Note> notes = s.createCriteria(Note.class).add(Restrictions.eq("pid", pid)).list(); 
    List<Event> events = s.createCriteria(Event.class).add(Restrictions.eq("pid", pid)).list(); 

    Person p = new Person(notes, events); 
    return p; 
} 

private static Person savePerson(Session s, Person p) { 
    for (Note note : p.getNotes()) { 
     s.saveOrUpdate(note); 
    } 

    for (Event event : p.getEvents()) { 
     s.saveOrUpdate(event); 
    } 
} 
+0

謝謝Sharakan, 我想到了這種方法,但它不能幫助我緩存或添加到集合並獲取數據的基本功能。 Simon – SimonF 2013-03-13 18:00:07

+0

對於堅持數據,當然可以。只需將DAO的想法作爲適配器擴展到多個查詢即可。查看我更新的'savePerson'代碼。對於ehcache,你將不得不更具體。你想要做什麼與緩存? – sharakan 2013-03-13 18:18:03

+0

在多用戶環境中,這可能不太適用。如果兩個用戶在同一時間段內爲同一個人更新兩個不同的筆記,他們會覆蓋另一個筆記。用Hibernate/Ehcache管理集合,這不成問題。我有一種感覺,爲PID創建基本實體可能是最簡單的解決方案。 – SimonF 2013-03-13 18:38:56