开发者社区> 问答> 正文

Hibernate 的 JPA事务问题?报错

最近碰到一个JPA事务的问题,在小的线程数量下,JPA的事务能正常提交,数据也能正常插入到数据库中,但是发现在线程数量多的时候,出现数据插入(persist)不报错,但是也没有提交到数据库中,仔细打印日志,发现正常和不正常时,日志上代码的执行有区别。

无问题的执行日志:

[org.springframework.orm.jpa.JpaTransactionManager] [365] DEBUG [Creating new transaction with name [com.pilicat.repository.BaseDao.save]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; '']
[org.springframework.orm.jpa.JpaTransactionManager] [323] DEBUG [Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@de1f47] for JPA transaction]
[org.springframework.jdbc.datasource.DriverManagerDataSource] [162] DEBUG [Creating new JDBC DriverManager Connection to [jdbc:mysql://127.0.0.1:3306/TestDb]]
[org.springframework.orm.jpa.JpaTransactionManager] [355] DEBUG [Exposing JPA transaction as JDBC transaction [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@69e732]]
Hibernate: insert into t_app_log (appKey, buyer_nick, createTime, modified, oid, payment, seller_id, seller_nick, status, tid, type) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[org.springframework.orm.jpa.JpaTransactionManager] [752] DEBUG [Initiating transaction commit]
[org.springframework.orm.jpa.JpaTransactionManager] [462] DEBUG [Committing JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@de1f47]]
[org.springframework.orm.jpa.JpaTransactionManager] [548] DEBUG [Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@de1f47] after transaction]
[org.springframework.orm.jpa.EntityManagerFactoryUtils] [328] DEBUG [Closing JPA EntityManager]

 

有问题的执行日志:

[org.springframework.orm.jpa.JpaTransactionManager] [365] DEBUG [Creating new transaction with name [com.pilicat.repository.BaseDao.save]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; '']
[org.springframework.orm.jpa.JpaTransactionManager] [323] DEBUG [Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@1fc790a] for JPA transaction]
[org.springframework.jdbc.datasource.DriverManagerDataSource] [162] DEBUG [Creating new JDBC DriverManager Connection to [jdbc:mysql://127.0.0.1:3306/TestDb]]
[org.springframework.orm.jpa.JpaTransactionManager] [355] DEBUG [Exposing JPA transaction as JDBC transaction [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@cb590]]
[org.springframework.orm.jpa.EntityManagerFactoryUtils] [193] DEBUG [Opening JPA EntityManager]
[org.springframework.orm.jpa.EntityManagerFactoryUtils] [198] DEBUG [Registering transaction synchronization for JPA EntityManager]
[org.springframework.orm.jpa.EntityManagerFactoryUtils] [328] DEBUG [Closing JPA EntityManager]
[org.springframework.orm.jpa.JpaTransactionManager] [752] DEBUG [Initiating transaction commit]
[org.springframework.orm.jpa.JpaTransactionManager] [462] DEBUG [Committing JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@1fc790a]]
[org.springframework.orm.jpa.JpaTransactionManager] [548] DEBUG [Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@1fc790a] after transaction]
[org.springframework.orm.jpa.EntityManagerFactoryUtils] [328] DEBUG [Closing JPA EntityManager]

 

注意看执行正常的程序日志,在persist数据后,是有产生insert的sql语句的。

奇怪的是,执行测试环境,数据全部可以正常插入到数据库中。

但是部署到生产环境,数据处理量一上去,就persist方法调用后,并没有提交到数据了,更奇怪的是,也没有报任何错误。(数据保存方法上有Transactional注解)

另外,我发现有问题的日志中,多了2行日志:

[org.springframework.orm.jpa.EntityManagerFactoryUtils] [193] DEBUG

[Opening JPA EntityManager]


[org.springframework.orm.jpa.EntityManagerFactoryUtils] [198] DEBUG

[Registering transaction synchronization for JPA EntityManager]

 

为什么在执行的时候,会多出这2行呢?

不知道有没有对JPA深入了解的大侠可以指点一下?先谢了。

展开
收起
爱吃鱼的程序员 2020-06-22 17:05:57 700 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    刚看了一下spring orm的源码,是因为 TransactionSynchronizationManager.isSynchronizationActive()为true的情况下,出现的同步事务<arel="nofollow">http://stackoverflow.com/questions/8833219/why-nothing-happens-when-i-persist<arel="nofollow">http://www.adam-bien.com/roller/abien/entry/don_t_use_jpa_s

    2020-06-22 17:06:14
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载