我知道EntityManager的方法持久性会将一个实体添加到持久性上下文中,但不会提交数据。但无论我尝试什么,我的实体总是被提交。有人可以解释我如何使用mysql配置连接池和持久性单元,以避免在调用persist时提交?我想只在我打电话时才提交。
我使用MySQL 5.6,Glassfish 4.1和java 1.8.40
我的游泳池配置如下:
< jdbc-connection-pool datasource-classname =" com.mysql.jdbc.jdbc2.optional.MysqlDataSource"命名=" MySQLdb的" description =" mysql db pool"事务隔离级别="可串行" RES型=" javax.sql.DataSource中">
<属性名称="用户"描述="根"值="根">
<属性名称="密码"值="管理器">
< property name =" URL"值=" JDBC:MySQL的://本地主机:3306 / mydn了relaxAutoCommit =真">
< / JDBC连接池>
我的持久性单元配置如下:
<持久性单位名称="测试"交易类型=" JTA">
<提供商GT; org.eclipse.persistence.jpa.PersistenceProvider
< jta-data-source> jdbc / mysql
< exclude-unlisted-classes> false
<性状>
< property name =" javax.persistence.schema-generation.database.action"值="落和创建" />
< property name =" eclipselink.persistence-context.flush-mode"
值=" COMMIT" />
< /性状>
提前感谢任何帮助。
我有两个JSF表单,目标是: - 在第一次表单处理中创建实体TestEntity, - 然后用第一个实体作为参数调用EntityManager的mehtod持久化 - 然后在第二个表单处理中创建一个实体TestEntity2,将seconde实体链接到第一个 - 然后用第一个实体作为参数调用EntityManager的方法刷新,并调用flush方法
关键是当我调用refresh时抛出一个异常,说该实体不在持久化上下文中。
JSF调用实例化实例的会话作用域托管bean,此会话作用域托管bean调用有状态EJB,该EJB调用会话作用域托管bean(@Named)TestPersistent和调用实体管理器的此TestPersistent。在firts形式之后调用TestPersistent的方法保存,然后在第二个表单之后调用TestPersistent的方法更新。 以下是TestPersistent的代码:
@Named
@SessionScoped
public class TestPersistent implements Serializable {
@PersistenceContext(unitName="test")
EntityManager manager;
public TestPersistent() {
super();
}
public void save(TestEntity entity){
manager.persist(entity);
}
public void update(TestEntity entity) {
manager.refresh(entity);
manager.flush();
}
}