JPA存储库应该首选哪个CDI范围
如何确定下面的JPA存储库的适当CDI范围?
@Transactional
public class CategoryRep extends EntityRepository<Integer, Category> {
private static final long serialVersionUID = 856370976984333182L;
public List<Category> getAllCategories() {
// TODO
}
public List<Post> getAllPostsOfCategory(Integer categoryId) {
// TODO
}
@Transactional(value = TxType.REQUIRES_NEW, rollbackOn = RuntimeException.class)
public void createCategory(final String name, final String description)
throws DaoJpaException {
// TODO
}
}
我只能想到两个CDI范围:
我认为所有其他CDI范围都不合适:
entityManager.clear()
这样的调用将导致所有当前会话的所有实例也将被分离。 另外,这个单个存储库必须处理所有传入的请求。 这个范围可能适用于只读存储库吗? @Dependent
。 那么,这个问题有哪些最佳实践?
描述所有选项
所以我会一起去
所以如果我是你,我会去请求范围存储库,这是最简单的选择,你会避免所有这些问题。
你应该使用@ApplicationScoped。
每个请求都应该使用一个EntityManager,而不是重用。
在请求的开始时,您创建了entityManager,当它完成提交或回滚它时。
@Dependent将具有与其“主机”相同的范围,如果您将其注入到@RequestScoped中并且bean将具有相同的范围。
@SessionScoped只能用于小数据(如用户登录和权限)。
链接地址: http://www.djcxy.com/p/62211.html上一篇: Which CDI scope should be preferred for a JPA repository