2011-10-18 28 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服务,它将从临时对象初始化实体并将其保留。

相关问题