2015-01-15 41 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

相关问题