我已经花了几个小时来解决这个问题,但仍然没有弄清楚将JPA与JSF一起使用的正确方法。
我有一个会话范围的托管bean,它可以完成很多事情,其中之一是保留一些实体对象。在开始时,我创建了一个生产者方法,该方法以请求为范围,用于构建EntityManagerhtml" target="_blank">对象。无论如何,将请求的范围内的bean注入到会话范围内的bean的读操作已经完成了将该实例包装到Instance对象中。做完了
但是,当我尝试使用该EM时,出现了需要交易的异常。继续在互联网上阅读,有人告诉我必须使用PersistenceContext批注将EM直接注入到我的托管bean中。无论如何,我认为使用persistenceUnit注释并在需要它们的方法中创建我的em更有意义。注入可以工作,但是当我尝试保留某些东西时,我仍然会遇到交易必需的异常!
所以我在这里问:这样做的正确方法是什么?
编辑:我正在使用默认设置的Jboss eap 6.2。我正在使用WEB-INF中的xml文件部署数据源,因此我正在使用JTA。
我是个白痴。过去我已经遇到过这个问题,但是我忘记了。
对于每个在这里遇到相同问题的人,这里都是解决方案。容器管理的事务仅在容器是EJB时有效。如果容器是JSF,则不起作用!注入实体管理器的方式无关紧要,注入成功,但是创建的对象将不起作用。
解决该问题的方法是创建一个EJB DAO对象,该对象将为您处理数据库。就像是
@Named
@Stateless
public class MyDAO {
@PersistenceContext(unitName = "SRA")
private EntityManager em;
public void save(Object o) {
em.persist(o);
em.flush();
}
}
然后将这些对象注入托管bean中,如下所示:
@ManagedBean
@SessionScoped
public class MyManagedBean {
@EJB
private MyDAO dao;
public void action() {
....
dao.save(o);
}
}
直接将EntityManager注入受管Bean将为您提供所需的交易异常。
我仍然不确定是否将类似的东西注入到范围更广的bean中。稍后我将对此进行研究。
我已经设法在Jersey,HK2和一个普通的GrizzlyServer中设置了我自己的服务类的注入(到资源类中)。(基本上遵循了这个例子。) 我现在很好奇将JPA EntityManager注入我的资源类中的最佳方法是什么?(我目前正在考虑一个请求作为一个工作单元)。我目前正在研究的一个选项是以以下方式使用: null (我不想仅仅为了覆盖这个用例而依赖于重量级容器或额外的依赖注入库。)
如何使用Spring JPA注入EntityManager对象 我使用的是spring上下文 我的dao是,注入EntityManager 我的persistence.xml 所以我收到以下错误:
在我的J2EE应用程序中,我尝试使用spring boot和JPA技术,并将EntityManager注入DAO层。然而,我有一些问题。。。我的用户CRUD存储库: 我的spring boot应用程序类: } 最后是我的坚持。xml,位于src/main/resources/META-INF文件夹中: 所以,当我尝试使用这个注入的entityManager时,我得到了NullPointerExce
问题内容: Spring 是否可以在不扩展的情况下将JPA 对象注入到我的DAO类中?如果是,在这种情况下,Spring是否管理事务? 我试图使我的Spring配置尽可能简单: 问题答案: 是的,尽管它充满了陷阱,但由于JPA有点特殊。在代码中没有显式的Spring依赖关系的情况下,非常值得阅读有关注入JPA 和的文档: http://static.springsource.org/spring/
问题内容: 专家/大师/朋友 我们正在使用Spring 3.2,JPA 2,Hibernate 4.2组合,并在尝试将任何带弹簧注释的bean注入实现的EmtyInterceptor时,遇到了这个奇怪的null指针问题,如下所示。我们已经尝试给这个豆子和一个春天豆子添加注释,但是没有运气。 非常感谢您为解决这个难题提供的任何帮助。 在应用程序的其他任何地方,注入都像没有任何问题的魅力一样。这是我们
专家/大师/朋友 我们正在使用Spring 3.2、JPA 2、Hibernate 4.2组合,并面临这个奇怪的空指针问题,同时试图将任何Spring注释的bean注入到EmtyInterceptor中,实现如下所示。我们试着给这个豆子和Spring的豆子注释,但是没有成功。 非常感谢您对解决这个难题的任何帮助。 在应用程序的其他地方,注入就像一个魅力,没有任何问题。这是我们的应用程序上下文。xm