我最近开始研究JSF,并且通过以下两种方式偶然发现将实体包含到Controller Managed bean中。一个是将实体直接注入ManagedBean
,另一个实体作为非托管bean,只是作为在@PostConstruct
初始化的实例变量。
这种或那种方式有哪些优点/缺点?第二种通常表现为“正确的方式”,但似乎维护起来更复杂。
非管理实体
@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;
}
答案 0 :(得分:2)
实体拥有自己的生命周期,并且已由JPA管理。不推荐(CDI规范强烈禁止它)将实体声明为托管bean。最好保留对控制器中实体的引用 - 在您的情况下为非托管实体。