小编Pie*_*man的帖子

Hibernate Session不使用JpaTransactionManager事务

我正在开发一个使用Spring框架(4.3.3.RELEASE)和Hibernate(5.2.3.Final)的项目,我开始使用Spring Data JPA.

我刚刚迁移LocalSessionFactoryBeanHibernateTransactionManager配置使用的JPA的配置LocalContainerEntityManagerFactoryBeanJpaTransactionManager使用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)

spring hibernate jpa transactions spring-data-jpa

9
推荐指数
0
解决办法
1120
查看次数

itext 字体 UnsupportedCharsetException

我正在尝试在 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)

书中或谷歌搜索都没有提到这个问题。

关于我可能错过了什么有什么建议吗?

java fonts itext character-encoding

6
推荐指数
1
解决办法
5585
查看次数

没有 Spring Boot 的 Spring Boot 2 执行器

我想将 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 spring-mvc spring-boot spring-boot-actuator

6
推荐指数
1
解决办法
1618
查看次数