我正在开发一个使用Spring框架(4.3.3.RELEASE)和Hibernate(5.2.3.Final)的项目,我开始使用Spring Data JPA.
我刚刚迁移LocalSessionFactoryBean与HibernateTransactionManager配置使用的JPA的配置LocalContainerEntityManagerFactoryBean与JpaTransactionManager使用HibernateJpaSessionFactoryBean.
使用Sessions中的SessionFactorys 的现有hibernate代码似乎工作正常,直到我测试了一些代码执行一个实体的保存,然后在同一个事务中运行一些更新查询,并且代码在更新sql上失败:
javax.persistence.TransactionRequiredException: Executing an update/delete query
Run Code Online (Sandbox Code Playgroud)
事务管理器日志显示事务处于活动状态,然后回滚,这很奇怪.然后我注意到保存操作已到达数据库.
在调试时我可以看到会话对象似乎没有任何事务对象,因此似乎hibernate会话不使用或使用已配置的JpaTransactionManager事务.
当我配置HibernateTransactionManager标记为主要PlatformTransactionManager的附加事务管理器()时,代码然后工作.
接下来,当我将代码迁移到Spring Data Jpa时,我将希望在同一个Transaction中使用一些基于Hibernate的Dao代码和一些Spring Data Jpa Repository.如何让会话工厂使用JpaTransactionManager?
更新:
我现在发现上面的配置意味着事务管理器不会将会话刷新到数据库,因此无法正常工作.
我还发现,如果我将EntityManager注入到我的Daos中:
@PersistenceContext()
private EntityManager entityManager;
Run Code Online (Sandbox Code Playgroud)
并使用:
entityManager.unwrap( Session.class )
Run Code Online (Sandbox Code Playgroud)
然后代码正确地参与事务.但是如果我得到SessionFactory(通过spring注入,或者从unwrap中解包entityManagerFactory,或者getSessionFactory()从unwrap中使用Session)并调用getCurrentSession()它,则返回一个未连接到事务的不同Session对象.
我的配置:
@Configuration
@EnableJpaRepositories(
basePackages = "com.mycompany.common.services",
transactionManagerRef = "jpaTransactionManager"
)
@EnableTransactionManagement(order = 5)
public class PersistenceConfiguration …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 java Web 应用程序中使用 iText(版本 5.4.0)创建 pdf 文档,但遇到了字体问题。
该网络应用程序是多语言的,因此用户可以用多种语言(例如英语、法语、立陶宛语、中文、日语、阿拉伯语等)将信息保存到系统中。
当我尝试配置 pdf 以输出一些示例日语文本时,它没有显示,因此我开始遵循官方“iText in Action”书中的示例。我遇到的问题是,当我尝试使用 BaseFont.IDENTITY_H 编码配置字体时,出现以下错误:
java.nio.charset.UnsupportedCharsetException: Identity-H
at java.nio.charset.Charset.forName(Charset.java:505)
at com.itextpdf.text.pdf.PdfEncodings.convertToBytes(PdfEncodings.java:186)
at com.itextpdf.text.pdf.Type1Font.<init>(Type1Font.java:276)
at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:692)
at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:615)
at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:450)
Run Code Online (Sandbox Code Playgroud)
书中或谷歌搜索都没有提到这个问题。
关于我可能错过了什么有什么建议吗?
我想将 Spring Boot 执行器指标添加到我现有的 Spring MVC 5 应用程序中(我无法转换为 Spring Boot)。关于 SO(没有 Spring Boot 的 Spring Boot Actuator)有几个已回答的问题,但它们用于使用 Spring Boot Actuator 1.x。Spring Boot Actuator 2.x 已重新架构,因此这些说明不再有效。有没有人将 Spring Boot Actuator 2.x 与标准 Spring MVC 5 应用程序集成?
spring ×2
fonts ×1
hibernate ×1
itext ×1
java ×1
jpa ×1
spring-boot ×1
spring-mvc ×1
transactions ×1