Java EntityManager.persist()和EntityManager.merge()不是';使用c3p0时,不要对数据库进行任何更改

Java EntityManager.persist()和EntityManager.merge()不是';使用c3p0时,不要对数据库进行任何更改,java,hibernate,jpa,c3p0,pool,Java,Hibernate,Jpa,C3p0,Pool,我正在使用c3p0作为连接池管理器进行休眠。从数据库中检索数据工作得很好,但使用JPA对数据库进行的任何插入或更新都不会进行任何更改。有人能解释一下为什么会这样吗 我正在使用JBossEAP6服务器 persistence.xml: <persistence-unit name="judzi" transaction-type="JTA"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</p

我正在使用c3p0作为连接池管理器进行休眠。从数据库中检索数据工作得很好,但使用JPA对数据库进行的任何插入或更新都不会进行任何更改。有人能解释一下为什么会这样吗

我正在使用JBossEAP6服务器

persistence.xml:

<persistence-unit name="judzi" transaction-type="JTA">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

    <class>com.guizion.model.Administrator</class>
    <class>com.guizion.model.BilletPayment</class>
    <class>com.guizion.model.Client</class>
    <class>com.guizion.model.Contact</class>
    <class>com.guizion.model.DepositPayment</class>
    <class>com.guizion.model.Email</class>
    <class>com.guizion.model.ExpiredEmailLink</class>
    <class>com.guizion.model.History</class>
    <class>com.guizion.model.LastSalesReportCache</class>
    <class>com.guizion.model.Location</class>
    <class>com.guizion.model.Notification</class>
    <class>com.guizion.model.Order</class>
    <class>com.guizion.model.OrderProduct</class>
    <class>com.guizion.model.Phone</class>
    <class>com.guizion.model.Product</class>
    <class>com.guizion.model.Route</class>
    <class>com.guizion.model.User</class>
    <class>com.guizion.model.Vendor</class>
    <class>com.guizion.model.VendorProduct</class>

    <properties>
        <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="hibernate.enable_lazy_load_no_trans" value="true"/>
        <property name="hibernate.hbm2ddl.auto" value="update" />

        <property name="connection.autoReconnect" value="true" />
        <property name="connection.autoReconnectForPools" value="true" />
        <property name="connection.is-connection-validation-required" value="true" />

        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />

        <!-- Local -->
        <property name="hibernate.connection.username" value="****" />
        <property name="hibernate.connection.password" value="****" />
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/judzi" />

        <!-- C3P0 -->
        <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" />
        <property name="hibernate.c3p0.max_size" value="100" />
        <property name="hibernate.c3p0.min_size" value="5" />
        <property name="hibernate.c3p0.acquire_increment" value="1" />
        <property name="hibernate.c3p0.timeout" value="300" />
        <property name="hibernate.c3p0.max_statements" value="50" />
        <property name="hibernate.c3p0.idle_test_period" value="3000" />
    </properties>
</persistence-unit>

org.hibernate.jpa.HibernatePersistenceProvider
com.guizion.model.Administrator
com.guizion.model.BilletPayment
com.guizion.model.Client
com.guizion.model.Contact
com.guizion.model.DepositPayment
com.guizion.model.Email
com.guizion.model.ExpiredEmailLink
com.guizion.model.History
com.guizion.model.LastSalesReportCache
com.guizion.model.Location
com.guizion.model.Notification
com.guizion.model.Order
com.guizion.model.OrderProduct
com.guizion.model.Phone
com.guizion.model.Product
com.guizion.model.Route
com.guizion.model.User
com.guizion.model.Vendor
com.guizion.model.VendorProduct
依赖项(使用maven):

。。。
org.hibernate
休眠实体管理器
5.0.7.1最终版本
org.hibernate
冬眠核心
5.0.7.1最终版本
org.hibernate
hibernate-c3p0
5.0.7.1最终版本
org.hibernate
休眠验证器
5.2.3.最终版本
org.hibernate.common
hibernate commons注释
5.0.1.最终版本
org.hibernate.javax.persistence
hibernate-jpa-2.1-api
1.0.0.1决赛
...
持久化和更新的方法:

@NoArgsConstructor
@Stateless
public class SqlRepository {

    @Inject
    private EntityManager em;

    public EntityManager getManager() {
        return em;
    }

    public <T extends BaseEntity> T add(T item) {
        if (item.hasValidId())
            return update(item);
        this.em.persist(item);
        this.em.flush();
        return this.refresh(item);
    }

    public <T extends BaseEntity> T update(T item) {
        return this.em.merge(item);
    }

    ...
}
@noargsconstuctor
@无国籍
公共类SqlRepository{
@注入
私人实体管理者;
公共实体管理器getManager(){
返回em;
}
公共T添加(T项){
if(item.hasValidId())
返回更新(项目);
本.em.persist(项目);
这个.em.flush();
返回此。刷新(项目);
}
公共T更新(T项){
返回此.em.merge(项);
}
...
}

您的事务边界在哪里?对于@Stateless EJB,我不需要指定它。你说的是@Transactional注释吗?这取决于你是如何管理事务的。我问边界在哪里。您在哪里开始交易,在哪里提交交易?你的bean是否是无状态的并不相关。那么日志怎么说呢?你已经看过日志了,是吗?当然是@NeilStockton。我会把它放在身体上。
@NoArgsConstructor
@Stateless
public class SqlRepository {

    @Inject
    private EntityManager em;

    public EntityManager getManager() {
        return em;
    }

    public <T extends BaseEntity> T add(T item) {
        if (item.hasValidId())
            return update(item);
        this.em.persist(item);
        this.em.flush();
        return this.refresh(item);
    }

    public <T extends BaseEntity> T update(T item) {
        return this.em.merge(item);
    }

    ...
}