2011-03-09 63 views
0

該主題可能會引起誤解。基本上,我有3個「實體」與他們之間的關係。只有一個實體需要持久化(在服務器重新啓動之間)。我仍然希望非持久性實體的數據庫功能......例如查詢。JPA-混合實體類和非實體類

什麼是正確的模式來處理這個?

我想到了一個內存數據庫,但由於我的實體之一確實需要持久的,我不認爲這是一種選擇,因爲非持久性的實體將是一個不同的持久化單元。

另一個想法只是讓一切執着,但擦拭非持久表系統重新啓動時。

?謝謝。

回答

1

你可以有兩個持久性單元。一個是磁盤數據庫,另一個是內存數據庫。

的關係將需要短暫的,或可能存儲的外鍵A和B.或者根本沒有這兩者之間的關係,需要時只需執行一個查詢找到A或B,作爲關係在一個持久的實體中,沒有被持久化似乎很古怪。

+0

我認爲在內存數據庫中使用不同的PU + an而不是(直接)定義不同PU中的對象之間的關係聽起來很合理。 – 2011-03-11 16:33:03

0

這本質上不是一個JPA問題。它將適用於您正在使用的任何持久性機制。

如果我正確地讀你的問題,兩個非持續性的實體可能僅僅是POJO和在JPA的應用程序,他們不會住在任何持久性單元。

你沒有描述的關係,所以這是一個有點猜測。如果持續實體由另外兩個實體組成,則可能有類似的情況:

@Entity 
@Table(name = "TABLE_NAME") 
public class PersistingEntity implements Serializable { 
    @Id 
    @Column(name = "ID") 
    private Long id; 

    ... 

    @Transient 
    A a = new A(); 

    @Transient 
    B b = new B(); 

    ... 
} 

其中A和B是非持久實體。

+2

'了'和'B'應標記爲'@ Transient'否則他們會得到序列化和持久化的字節數組。 – CarlosZ 2011-03-09 19:38:42

+0

@CarlosZ謝謝! – 2011-03-09 19:44:44

+0

謝謝。我明白,將它們標記爲暫時的會使它們脫離持久性,但問題是我希望a和b字段參與關係,並且我希望能夠對它們執行查詢。 – 2011-03-09 20:05:24