我试图集成Spring和JSF,我坚持使用对象。我不想处理事务(begin-commit等)
经过一些谷歌,我可以找到一个答案,给我需要在这个链接
我使用eclipselink作为ORM和Oracle 11g数据库,并使用带有Maven的Glassfish Server3.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上可以看到**给对象分配序列**log,但其他日志没有生成,但如果我写了下面的代码,其中不可见的部分与上面的代码块相同;
public void create(EfaFunctions efaFunctions) {
entityManager.getTransaction().begin();
entityManager.persist(efaFunctions);
entityManager.getTransaction().commit();
}
它将持久化该对象。这是可行的,但我不想处理begin()commit()部分,并且使用JTA容器的相关资源应该由托管持久性代替我来完成。有谁能告诉我我错在哪里吗
在JSF托管bean中,没有隐式事务。避免手动管理事务的唯一方法是在应用服务器中创建一个EJB,并让JSF托管bean调用它来持久化数据。您使用的是GlassFish,因此可以使用EJB...但这绝对是一个新的复杂程度。处理持久性事务的一个很好的方法是有一个try-catch块模板,如下所示:
EntityManager em = ... //However you get an em.
try {
em.getTransaction().begin();
// ... Put your persistence code here.
em.getTransaction().commit();
} catch (Exception ex) {
em.getTransaction().rollback();
throw ex;
}finally {
em.close();
}
它看起来不像超光滑的CDI和自动事务那样干净,但它可以正确地处理事务,并确保数据完整性。
我有一个用例,我想我需要两个实体管理器,它们访问相同的持久性单元。所以本质上,我希望在同一个数据库上有两个持久性上下文。这是否可以通过PersistenceContext注释实现? 我想写以下内容,但不知道如何告诉JPA注入两个不同的manager实例。 我想我可以切换到应用程序管理的事务,然后我可以使用工厂创建另一个事务。但是我不想自己管理事务,如果不是绝对必要的话。
我有一个实体,代表客户发送的订单,这个订单可能会在电话上与客户讨论后更新,但客户发送的初始订单必须保持不更新。我如何可以保持同一实体两次,是否有效的使用深层克隆。我试图分离实体以便持久化上下文持久化一个新的,但是持久化上下文仍然在更新第一个条目。
我有一个JavaEE项目,它使用多个持久性单元。有没有办法指定特定JPA实体所属的持久性单元?一些实体位于一个数据源中,而其他实体位于我的第二个数据源中。有没有一种方法可以通过注释来区分两者?
主要内容:JPA级联持久化示例,输出结果级联持久化用于指定如果实体持久化,则其所有关联的子实体也将被持久化。 以下语法用于执行级联持久性操作 - JPA级联持久化示例 在这个例子中,我们将创建两个相互关联的实体类,但要建立它们之间的依赖关系,我们将执行级联操作。 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,其中包含属性:,,以及标记为级联规范的类型的对象。 文件: StudentEntity.java - 第2步:
这就是我的datasourcebean的样子
问题内容: 我有一个托管bean,其中包含当前页面的实体对象列表。在我创建一个新对象并在事务中使用persist()将其持久保存到数据库之后;在另一个事务中,当我调用merge时(由于该实体由于先前的事务提交而处于分离状态);实体管理器无法在持久性上下文中找到对象,并向数据库抛出选择查询。我是否缺少某些东西,或者是正常行为? 更新:当我使用mysql数据库和自动生成的ID列时,存在上述问题。当我在