设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间22 现在时间22 缓存数据 一个女孩所能发的最大的脾气就是如同哑巴不开口说话。晚安!

一个女孩所能发的最大的脾气就是如同哑巴不开口说话。晚安!

查看: 987|回复: 3

springmvc+Hibernate+JPA(混合事务)解读

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:230
  • 打卡月天数:0
  • 打卡总奖励:3360
  • 最近打卡:2025-04-16 04:08:46
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
402
主题
386
精华
0
金钱
4591
积分
854
注册时间
2023-1-4
最后登录
2025-5-31

发表于 2024-9-27 22:11:32 | 显示全部楼层 |阅读模式
目录
  • springmvc+Hibernate+JPA(混合事务)
  • 解决方案
    • 配置文件
    • 修改@Transactional
  • 总结

    springmvc+Hibernate+JPA(混合事务)

    最近发觉 spring-data-jpa 比较好用。

    我在springcloud的项目中使用后,也尝试在springmvc中增加 jpa。

    但是老项目用的是hibernate,在使用添加jpa后,事务出现了一些问题。

    解决方案

    配置文件

    1 配置Hibernate事务(transactionManager)

    1. <!-- 事物管理器配置 -->
    2. <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    3. <property name="sessionFactory" ref="sessionFactory" />
    4. </bean>
    5. <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
    6. <!-- hibernate -->
    复制代码

    2 配置Jpa事务(transactionManager_jpa)

    1. <!-- Jpa 事务配置 -->
    2. <bean id="transactionManager_jpa" class="org.springframework.orm.jpa.JpaTransactionManager">
    3. <property name="entityManagerFactory" ref="entityManagerFactory"/>
    4. </bean>
    5. <!-- Spring Data Jpa配置 -->
    6. <jpa:repositories base-package="com.kintech.dao.*" transaction-manager-ref="transactionManager_jpa" entity-manager-factory-ref="entityManagerFactory"/>
    7. <!-- 使用annotation定义事务 -->
    8. <tx:annotation-driven transaction-manager="transactionManager_jpa" proxy-target-class="true" />
    复制代码

    配置全本:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:mvc="http://www.springframework.org/schema/mvc"
    6. xmlns:aop="http://www.springframework.org/schema/aop"
    7. xmlns:tx="http://www.springframework.org/schema/tx"
    8. xmlns:p="http://www.springframework.org/schema/p" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    9. xsi:schemaLocation="http://www.springframework.org/schema/beans
    10. http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
    11. http://www.springframework.org/schema/context
    12. http://www.springframework.org/schema/context/spring-context-4.3.xsd
    13. http://www.springframework.org/schema/mvc
    14. http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
    15. http://www.springframework.org/schema/aop
    16. http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    17. http://www.springframework.org/schema/tx
    18. http://www.springframework.org/schema/tx/spring-tx-4.3.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"
    19. default-lazy-init="true">
    20. <!--配置数据源-->
    21. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    22. <property name="driverClass" value="${jdbc.driver}" /> <!--数据库连接驱动-->
    23. <property name="jdbcUrl" value="${jdbc.jdbcUrl}" /> <!--数据库地址-->
    24. <property name="user" value="${jdbc.user}" /> <!--用户名-->
    25. <property name="password" value="${jdbc.password}" /> <!--密码-->
    26. <property name="maxPoolSize" value="${jdbc.maxPoolSize}" /> <!--最大连接数-->
    27. <property name="minPoolSize" value="${jdbc.miniPoolSize}" /> <!--最小连接数-->
    28. <property name="initialPoolSize" value="${jdbc.initialPoolSize}" /> <!--初始化连接池内的数据库连接-->
    29. <property name="maxIdleTime" value="${jdbc.maxIdleTime}" /> <!--最大空闲时间-->
    30. </bean>
    31. <!-- hibernate -->
    32. <!--配置session工厂-->
    33. <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    34. <property name="dataSource" ref="dataSource" />
    35. <property name="packagesToScan" value="com.kintech.model" />
    36. <property name="hibernateProperties">
    37. <props>
    38. <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> <!--hibernate根据实体自动生成数据库表-->
    39. <prop key="hibernate.dialect">${hibernate.dialect}</prop> <!--指定数据库方言-->
    40. <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <!--在控制台显示执行的数据库操作语句-->
    41. <prop key="hibernate.format_sql">${hibernate.format_sql}</prop> <!--在控制台显示执行的数据哭操作语句(格式)-->
    42. <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>
    43. <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop> <!-- 查询缓存 -->
    44. <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
    45. <prop key="hibernate.cache.region.factory_class">${hibernate.cache.region.factory_class}</prop>
    46. </props>
    47. </property>
    48. </bean>
    49. <!-- 事物管理器配置 -->
    50. <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    51. <property name="sessionFactory" ref="sessionFactory" />
    52. </bean>
    53. <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
    54. <!-- hibernate -->
    55. <!-- JPA -->
    56. <!-- JPA实体管理器工厂 -->
    57. <bean id="entityManagerFactory" name="jpaEntityManagerFactory"
    58. class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    59. <property name="dataSource" ref="dataSource" />
    60. <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter" />
    61. <!-- 加入定制化包路径 -->
    62. <property name="packagesToScan" value="com.kintech.model.domain.*" />
    63. <property name="jpaProperties">
    64. <props>
    65. <prop key="hibernate.current_session_context_class">thread</prop>
    66. <prop key="hibernate.hbm2ddl.auto">none</prop><!-- validate/update/create -->
    67. <prop key="hibernate.show_sql">true</prop>
    68. <prop key="hibernate.format_sql">true</prop>
    69. <!-- 建表的命名规则 -->
    70. <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
    71. </props>
    72. </property>
    73. </bean>
    74. <!-- 设置JPA实现厂商的特定属性 -->
    75. <bean id="hibernateJpaVendorAdapter"
    76. class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    77. <property name="databasePlatform" value="${hibernate.dialect}"/>
    78. </bean>
    79. <!-- Jpa 事务配置 -->
    80. <bean id="transactionManager_jpa" class="org.springframework.orm.jpa.JpaTransactionManager">
    81. <property name="entityManagerFactory" ref="entityManagerFactory"/>
    82. </bean>
    83. <!-- Spring Data Jpa配置 -->
    84. <jpa:repositories base-package="com.kintech.dao.*" transaction-manager-ref="transactionManager_jpa" entity-manager-factory-ref="entityManagerFactory"/>
    85. <!-- 使用annotation定义事务 -->
    86. <tx:annotation-driven transaction-manager="transactionManager_jpa" proxy-target-class="true" />
    87. <!-- JPA -->
    88. </beans>
    复制代码

    修改@Transactional

    在使用JPA时,注明

    @Transactional("transactionManager_jpa")

    1. @Transactional("transactionManager_jpa")
    2. @Override
    3. public Model_Res add(Model_Req req) {
    4. //jpa dao
    5. Model entity = dao.save(reqData);
    6. return res;
    7. }
    复制代码

    原来的Hibernate不用改变(因为)

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持晓枫资讯。


    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
    晓枫资讯-科技资讯社区-免责声明
    免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
          1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
          2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
          3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
          4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
          5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
    http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

      离线 

    TA的专栏

    等级头衔

    等級:晓枫资讯-列兵

    在线时间
    0 小时

    积分成就
    威望
    0
    贡献
    0
    主题
    0
    精华
    0
    金钱
    20
    积分
    20
    注册时间
    2022-12-27
    最后登录
    2022-12-27

    发表于 2025-3-22 09:29:24 | 显示全部楼层
    顶顶更健康!!!
    http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

      离线 

    TA的专栏

    等级头衔

    等級:晓枫资讯-列兵

    在线时间
    0 小时

    积分成就
    威望
    0
    贡献
    0
    主题
    0
    精华
    0
    金钱
    16
    积分
    12
    注册时间
    2022-12-26
    最后登录
    2022-12-26

    发表于 2025-3-29 06:23:45 | 显示全部楼层
    感谢楼主,顶。
    http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

      离线 

    TA的专栏

    等级头衔

    等級:晓枫资讯-列兵

    在线时间
    0 小时

    积分成就
    威望
    0
    贡献
    0
    主题
    0
    精华
    0
    金钱
    18
    积分
    16
    注册时间
    2022-12-24
    最后登录
    2022-12-24

    发表于 2025-4-9 11:25:52 | 显示全部楼层
    路过,支持一下
    http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
    严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    1楼
    2楼
    3楼
    4楼

    手机版|晓枫资讯--科技资讯社区 本站已运行

    CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

    晓枫资讯--科技资讯社区

    本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

    如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

    Powered by Discuz! X3.5

    快速回复 返回顶部 返回列表