spring boot 2.x 配置hibernate

  1. 新(xīn)聞資訊
  2. 技(jì )術百科(kē)
行業動态 公(gōng)司新(xīn)聞 案例分(fēn)享 技(jì )術百科(kē)

spring boot 2.x 配置hibernate

來源:奇站網絡 浏覽量:3419 發布日期: 2020-07-05

1、環境準備

spring boot版本:2.3.1.RELEASE

#

網上搜索spring boot 2.x hibernate配置,很(hěn)多(duō)都是jpa例子
從關系上來說應該是spring data jpa-》hibernate-》jpa,jpa是注解規範,jpa是基于hibernate幫我們實現一些通用(yòng)的操作(zuò)。
因為(wèi)需要把舊的項目(spring mvc + spring + hibernat 3.6.5,前後端分(fēn)離)升級spring boot 2.x,這裏隻讨論hibernate的配置,畢竟除了hibernate的部分(fēn)需要升級,其他(tā)的部分(fēn)大部分(fēn)都可(kě)以通用(yòng)。

2、sessionFactory

hibernate别的不需要多(duō)說,隻需要設置sessionFactory就可(kě)以了。

spring boot可(kě)以直接從EntityManagerFactory獲取sessionFactory.

下面是修改SimpleHibernateDao的代碼,SimpleHibernateDao是舊項目裏的封裝(zhuāng)了常用(yòng)方法的基類

  1. @Autowired
  2. private EntityManagerFactory entityManagerFactory;
  3. /**
  4. * 取得sessionFactory.
  5. */
  6. public SessionFactory getSessionFactory() {
  7. return entityManagerFactory.unwrap(SessionFactory.class);
  8. }
  9. /**
  10. * 取得當前Session.
  11. */
  12. protected Session getSession() {
  13. return getSessionFactory().getCurrentSession();
  14. }

獲取session的2種方式:
1、getCurrentSession()會自動關閉session,但是要配置current_session_context_class,并且需要使用(yòng)事務(wù)
2、openSession()這種方式需要手動關閉session

3、步驟三

前面配置完,測試報no transaction is in progress錯誤
解決方法1:代碼配置

  1. spring.jpa.database=MYSQL
  2. spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
  3. spring.jpa.show-sql=true
  4. spring.jpa.hibernate.ddl-auto=none
  5. spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
  6. spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
  7. spring.jpa.properties.hibernate.show-sql=true
  8. spring.jpa.properties.hibernate.cache.use_second_level_cache=false
  9. spring.jpa.properties.hibernate.cache.use_query_cache=false
  1. @Configuration
  2. public class HibernateConfig {
  3. @Autowired
  4. private Environment environment;
  5. @Autowired
  6. private DataSource dataSource;
  7. @Bean
  8. public LocalSessionFactoryBean sessionFactoryBean() {
  9. LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
  10. sessionFactoryBean.setDataSource(dataSource);
  11. sessionFactoryBean.setPackagesToScan("com.qizhan100");//dao和entity的公(gōng)共包
  12. sessionFactoryBean.setHibernateProperties(hibernateProperties());
  13. return sessionFactoryBean;
  14. }
  15. //獲取hibernate配置
  16. private Properties hibernateProperties() {
  17. Properties properties = new Properties();
  18. properties.setProperty("hibernate.current_session_context_class", environment.getProperty("spring.jpa.properties.hibernate.current_session_context_class"));
  19. properties.setProperty("hibernate.hbm2ddl.auto", environment.getProperty("spring.jpa.hibernate.ddl-auto"));
  20. properties.setProperty("hibernate.show-sql", environment.getProperty("spring.jpa.properties.hibernate.show-sql"));
  21. properties.setProperty("hibernate.cache.use_second_level_cache", environment.getProperty("spring.jpa.properties.hibernate.cache.use_second_level_cache"));
  22. properties.setProperty("hibernate.cache.use_query_cache", environment.getProperty("spring.jpa.properties.hibernate.cache.use_query_cache"));
  23. return properties;
  24. }
  25. }

解決方法2:降低hibernate版本

  1. <properties>
  2. <java.version>1.8</java.version>
  3. <hibernate.version>5.0.12.Final</hibernate.version>
  4. </properties>
  5. <dependency>
  6. <groupId>org.hibernate</groupId>
  7. <artifactId>hibernate-core</artifactId>
  8. <version>${hibernate.version}</version>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.hibernate</groupId>
  12. <artifactId>hibernate-entitymanager</artifactId>
  13. <version>${hibernate.version}</version>
  14. </dependency>
  15. `

getCurrentSession導緻的問題

問題1:org.hibernate.HibernateException: No CurrentSessionContext configured!

application.properties

  1. spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
問題2:Could not obtain transaction-synchronized Session for current thread

這個問題就是因為(wèi)session是用(yòng)getCurrentSession()獲取,但是方法上沒有(yǒu)開啓事務(wù)導緻。

consider declaring the factory method as static for independence from its containing instance
待查

參考資料
https://www.jianshu.com/p/57e3c9a40709
https://blog.csdn.net/qq_15329947/article/details/85232287
https://blog.csdn.net/xiaonannew/article/details/82634241
https://blog.csdn.net/wt592376761/article/details/104797009

上一篇 jenkins

廈門奇站網絡科(kē)技(jì )有(yǒu)限公(gōng)司

電(diàn)話:13313868605

QQ:3413772931

地址:廈門集美區(qū)軟件園三期


                    掃一掃加我咨詢

亚州码专无区2022 亚洲精品国产SUV一区 吃奶2做爰韩国 年轻漂亮秘书6 免费大片在线观看WWW 拍真实国产伦偷精品 男人边吻奶边挵进去A片小说 《年轻的寡妇2》中文字幕 小萍的性荡生活40章 成全电影播放在线观看 17.C-起草官网 TXVLOGCOM糖心官网网站 父亲有力挺送女儿的花园 中国新疆XXXXXL19DFM 二人世界高清免费版在线观看 少女哔哩哔哩高清免费播放 4D玉蒲团奶水都喷出来了免费 国产电影一区二区三区 日产精品一线二线三线芒果 狂野少女免费观看完整电视 高清 亚洲永久无码7777KKK 交换H圆房~H嗯啊乱叫赵东成 麻花传剧原创MV在线看完整版视频 黑料门-今日黑料-最新2023 国产熟妇搡BBBB搡BBBB 姑娘第8集在线观看免费播放 宝贝腿开大点我添添公交车 女员工的滋味 欧美片巜欲性高 今夜很长想把你做进我的梦里 大肉大捧一进一出好爽动态图 免费无码黄在线观看WWW 护士交换做爰3 7995WX鲁大师视频 成全电影大全在线观看国语高清 被绑在坐桩机上抹春药BL推文 小奶瓶(产奶) 晨晨爱吃萝卜 琪琪伦伦影院理论片 瞒着老公加班的HR中字 国产电影一曲二曲三曲图片 互换人妻HD中字 一面亲一面膜下最新版 天美麻花星空高清免费观看完整版 三年在线观看免费大全哔哩哔哩 含着她的花蒂啃到高潮在线观看 星辰视频在线观看免费观看 情欲荡乳办公室HD 男人添女人下部高潮全视频 我的漂亮的小瘦子3 情欲秘书(H)在线阅读