2011-05-09 50 views
3

我正在做一個應用程序在播放框架中,我需要存儲非實體對象的同一個實例到JPA實體沒有堅持到數據庫,我想知道是否有可能實現這一點,或不使用註釋。什麼我要尋找的樣本代碼:保存一個對象到一個實體沒有堅持它在JPA

public class anEntity extends Model { 
    @ManyToOne 
    public User user; 

    @ManyToOne 
    public Question question; 


    //Encrypted candidate name for the answer 
    @Column(columnDefinition = "text") 
    public BigInteger candidateName; 

    //I want that field not to be inserted into the database 
    TestObject p= new TestObject(); 

我試圖@Embedded註解,但是它應該嵌入對象字段到實體表。有沒有辦法使用@Embedded,同時保持對象列隱藏在實體表中?

+0

我編輯了這個問題並回答了一下,以澄清總是應該使用相同的瞬態實例。希望你不要介意.. – fasseg 2011-05-09 20:02:35

回答

7

時退房@Transient註釋:

「此批註指定屬性或字段不是持久它用於標註實體類的屬性或字段,映射超,或可嵌入類」

要確保你總是讓你可以實現Singleton模式相同的對象,所以你的實體可以使用其getInstance()方法來設置臨時對象:

所以這應該做的伎倆:

public class anEntity extends Model { 
    @Transient 
    private TransientSingleton t; 

    public anEntity(){ // JPA calls this so you can use the constructor to set the transient instance. 
     super(); 
     t=TransientSingleton.getInstance(); 
    } 


public class TransientSingleton { // simple unsecure singleton from wikipedia 

    private static final TransientSingleton INSTANCE = new TransientSingleton(); 
    private TransientSingleton() { 
     [...do stuff..] 
    } 
    public static TransientSingleton getInstance() { 
     return INSTANCE; 
    } 
} 
+0

我試過了,但是當我從數據庫中獲取實體後嘗試使用瞬態對象時,它給了我一個空指針異常。 – deadlock 2011-05-09 18:54:16

+0

在你的課堂上添加一個Constroctur,並在那裏設置TestObject,正如答案中指出的那樣。 – fasseg 2011-05-09 18:56:16

+0

我相信我做到了! – deadlock 2011-05-09 18:59:31

相關問題