【发布时间】:2013-05-13 21:25:58
【问题描述】:
我正在尝试将 Spring 和 JSF 集成到持久对象上。我不想处理事务(开始 - 提交等)
经过一番谷歌搜索后,我可以找到答案,给出我需要的in this link
我使用 eclipselink 作为 ORM 和 Oracle 11g 数据库以及带有 maven 的 Glassfish 服务器 3.1。 我更喜欢 Spring 配置的注释。我用
@Transactional
@Service
相关类中的注释。
我的 persistence.xml 名称是 E_DefterManagementPU,我的事务类型是 JTA。
这是我坚持 efaFunctions
public EntityManager entityManager;
@Inject
public void setEntityManager() {
EntityManagerFactory emf = Persistence.
createEntityManagerFactory("E_DefterManagementPU");
this.entityManager = emf.createEntityManager();
}
public void create(EfaFunctions efaFunctions) {
entityManager.persist(efaFunctions);
}
实体管理器不为空,我可以看到 ** 为对象分配序列 ** 在 glassfish 上登录,但未生成其他日志,但如果我在下面编写代码,则不可见部分与 aboe 代码块相同;
public void create(EfaFunctions efaFunctions) {
entityManager.getTransaction().begin();
entityManager.persist(efaFunctions);
entityManager.getTransaction().commit();
}
它持久化对象。 这可行,但我不想处理 begin() commit() 部分,并且根据 JTA Container Managed Persistence 的资源应该代替我这样做。任何人都可以告诉我我错在哪里提前谢谢
【问题讨论】:
-
您是在 EJB(企业 Java Bean)的上下文中执行此操作吗?如果没有,则没有容器管理的事务,您必须在代码中管理事务(这确实没那么糟糕)。
-
谢谢贝利,实际上我不使用 EJB,我正在尝试我的 Web 项目的这个服务层。我的 Bean 在上面,它们是 JSF ManagedBeans。没有任何关于 EJB 的知识,我希望我能正确定义.
-
如果没有容器管理器,spring 如何在不管理事务的情况下处理事务。对不起,我没有受过教育,但我有一个 spring 项目,它使用下面的代码运行
protected Class<T> entityClass; @PersistenceContext protected EntityManager entityManager; @Override public T create(T t) { this.entityManager.persist(t); return t; } -
容器管理的事务是 EJB 规范的一部分。如果您不使用 EJB,则此功能根本不可用,与查看不起作用的“干净”代码相比,您会更乐意使用“杂乱”代码做一些事情。
-
谢谢,我猜这也是最后一个 cmets 的答案
标签: java spring jpa persistence jta