2015-01-15 74 views
-1

我有實體模型有關係存儲在數據庫中的其他對象。 當我第一個對象時,我在構造函數中添加了另一個對象的id。 但是,當我構造函數體我必須從數據庫中獲取整個對象(第二個)並將其作爲關係簽名。在模型中使用dao給了我nullPointerException。 我該如何實現這一目標?Spring @Autowired註釋。如何在db中創建與對象相關的對象?

這裏是構造:

@Transient @Autowired public SkeletonElementDao skeletonElementDao; 


public SkeletonElement(Long id, String name, Long parent_id) { 
    super(id, name); 
    SkeletonElement parentSkeletonElement = null; 
    try { 
     parentSkeletonElement = skeletonElementDao.get(parent_id); 
    } catch(NullPointerException e) { 
     System.out.println("Creating element without parent_old "); 
    } finally { 
     this.setParent(parentSkeletonElement); 
    } 
} 

請幫助。

+0

如何春天自動裝配領域的一個構造函數被調用之前? –

+0

我不知道。但我有這樣的事情要做:D – masterdany88

+0

使用構造函數注入。 –

回答

0

嘗試@PostConstruct註釋。 Spring只能在調用構造函數後自動連線字段。

@Transient @Autowired public SkeletonElementDao skeletonElementDao; 

public SkeletonElement(Long id, String name, Long parent_id) { 
    super(id, name); 
    //Store these to private final fields 
} 

@PostConstruct 
public void init() { 
    SkeletonElement parentSkeletonElement = null; 
    try { 
     parentSkeletonElement = skeletonElementDao.get(parent_id); 
    } catch(NullPointerException e) { 
     System.out.println("Creating element without parent_old "); 
    } finally { 
     this.setParent(parentSkeletonElement); 
    } 
} 

另一種方法是使用constructor injection

+0

它不會工作,導致inint ()方法我沒有訪問skeletonElementDao對象。它必須在模型類 – masterdany88

+0

「你沒有訪問權限」之外完成,如「我不能在那裏使用它」或者「不在那裏」 BC skeletonElementDao應該在init()之前注入,方法運行。 – SzaboAdam

+0

我認爲,對於構造函數,我應該注入一個準備好的父對象,因爲它是由** JB Nizet **在其中一個答案中指向我的。我認爲'skeletonElementDao'只存在於'@ Controller'註釋類中。不在模特班! – masterdany88

相關問題