2013-05-19 31 views
1

我最近開始研究JSF,並且偶然發現了以下兩種方法將實體包含到Controller Managed bean中。一個通過直接注入實體作爲ManagedBean,另一個實體作爲非託管bean,簡單地作爲實例變量,初始化爲@PostConstructJSF ManagedEntity的優勢vs UnManagedEntity

這種或那種方式的優點/缺點是什麼?第二種情況通常表現爲「正確的方式」,但似乎維護起來更爲複雜。

非管理的實體

@Entity 
public class Book { 
//...attributes 
} 

@ManagedBean 
public class BookController { 

    private Book book; 

    @PostConstruct 
    public void init() { 
    book = new Book(); 

    } 


} 

管理實體

@Entity 
@ManagedBean 
public class Book implements Serializable { 
     //...attributes 
} 

@ManagedBean 
public class BookController { 

    @ManagedProperty(name="#{customer}") 
    private Book book; 

} 

回答

2

實體有自己的生命週期,已經由JPA管理。不建議(CDI規範強烈禁止它)將實體聲明爲託管的bean。更好地保留對控制器中實體的引用 - 您的案例中的非管理實體。