2011-10-18 26 views
1

我正在使用OpenJPA並想知道如何引用另一個自定義實體。我們假設有一個人和一個地址。兩者都是我的模擬實體。JPA - 爲JSF寫入訪問注入或實例化自定義屬性/對象?

人們如何正確引用地址?

這樣:

@Entity 
public class Person { 

    @Column 
    @Inject 
    Address adr; 
} 

或像這樣:

@Entity 
public class Person { 

    @Column 
    Address adr = new Address(); 
} 

我之所以寧願要注入或實例是我看空指針異常,當我訪問地址是這樣的:#{myBean.personA.adr.street} 因爲adr當對象未從現有記錄加載時返回null,但在創建新記錄時使用

你如何解決在你的實體auch問題?我錯過了什麼?順便說一句:我使用openJPA和Webbeans

回答

0

我會在您明確創建新Person的位置創建它。

@ManagedBean 
@ViewScoped 
public class Register { 

    private Person person; 

    @PostConstruct 
    public void init() { 
     person = new Person(); 
     person.setAddress(new Address()); 
    } 

    // ... 
} 

,或者,做的工作在Person,這樣你就不需要重複:

@ManagedBean 
@ViewScoped 
public class Register { 

    private Person person; 

    @PostConstruct 
    public void init() { 
     person = Person.create(); 
    } 

    // ... 
} 

@Entity 
public class Person { 

    public static Person create() { 
     Person person = new Person(); 
     person.setAddress(new Address()); 
     return person; 
    } 

    // ... 
} 
+0

很好的解決方案,這給了我兩個選擇做這樣的事情。謝謝 – jonnie119

+0

不客氣。 – BalusC

0

你可以嘗試定義一個構造函數來初始化你的變量的默認值。這樣任何時候創建對象都會先運行構造函數,然後再應用數據庫中的任何值。這工作假定您的地址對象在數據庫中沒有空值。 通常,雖然您希望在引用對象遍歷之前使用空檢查,因爲如果您尚未驗證數據條目和/或表沒有非空約束,那麼您的數據可能具有空值。

0

我不建議直接從JSF頁面引用實體。您可以先將表單數據保存到某些中間對象中,然後調用一些EJB服務,它將從臨時對象初始化實體並將其保留。

相關問題