Java EE,MySql和flush模式

时间:2015-04-10 22:57:25

标签: mysql java-ee

我知道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();
    }
}

0 个答案:

没有答案