atitit.springhibernate的事务机制spring不能保存对象的解决
在Spring中使用Hibernate,如果我们配置了TransactionManager,那么我们就不应该调用SessionFactory的openSession()来获得Sessioin,因为这样获得的Session并没有被事务管理。 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()
在Spring中使用Hibernate,如果我们配置了TransactionManager,那么我们就不应该调用SessionFactory的openSession()来获得Sessioin,因为这样获得的Session并没有被事务管理。
采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会。
采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()创建的session必须手动关闭。
使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
* 如果使用的是本地事务(jdbc事务)
* 如果使用的是全局事务(jta事务)
如果采用的时Hibernate4,使用getCurrentSession()必须配置事务,否则无法取到session
3 hibernateTemplate.getSessionFactory().getCurrentSession()
我们使用spring和hibernate结合,操作数据库最常用可能是HibernateTemplate,HibernateTemplate中集成了很多使用的方法,可惜的是没的createQuery方法,也许我们使用hibernate的时候喜欢使用Query,我们可能会封装hibernateTemplate.getSessionFactory().getCurrentSession()方法得到Session,session创建Query,这是一个方法,但你应该会得到异常 “createQuery without an active transaction”,因为使用hibernateTe【本文来自鸿网互联 (http://www.68idc.cn)】mplate.getSessionFactory().getCurrentSession(),你是使用的hibernate的事务管理,而你指望spring管理的事务是hibernateTemplate,所以你会提示没有打开事务的异常,解决方法:1)使用hibernate事务处理,就像上面单独使用hibernate一样,但这也许不是你想要的。2)使用hibernateTemplate的HibernateCallBack回调:
使用Hibernate的大多数应用程序需要某种形式的“上下文相关的” session,特定的session在整个特定的上下文范围内始终有效。然而,对不同类型的应用程序而言,要为什么是组成这种“上下文”下一个定义通常 是困难的;不同的上下文对“当前”这个概念定义了不同的范围。在3.0版本之前,使用Hibernate的程序要么采用自行编写的基于 ThreadLocal的上下文session,要么采用HibernateUtil这样的辅助类,要么采用第三方框架(比如Spring或Pico), 它们提供了基于代理(proxy)或者基于拦截器(interception)的上下文相关session。
从3.0.1版本开 始,Hibernate增加了SessionFactory.getCurrentSession()方法。一开始,它假定了采用JTA事务,JTA事务 定义了当前session的范围和上下文(scope and context)。Hibernate开发团队坚信,因为有好几个独立的JTA TransactionManager实现稳定可用,不论是否被部署到一个J2EE容器中,大多数(假若不是所有的)应用程序都应该采用JTA事务管理。 基于这一点,采用JTA的上下文相关session可以满足你一切需要。
更好的是,从3.1开 始,SessionFactory.getCurrentSession()的后台实现是可拔插的。因此,我们引入了新的扩展接口 (org.hibernate.context.CurrentSessionContext)和新的配置参数 (hibernate.current_session_context_class),以便对什么是“当前session”的范围和上下文(scope and context)的定义进行拔插。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Lockwaittimeoutceeded;tryrestartingtransaction - Cara menyelesaikan ralat MySQL: transaction wait timeouts Apabila menggunakan pangkalan data MySQL, kadangkala anda mungkin menghadapi ralat biasa: Lockwaittimeoutexceeded;tryrestartingtransaction. Ralat ini biasanya berlaku apabila

Pemprosesan transaksi MySQL: perbezaan antara penyerahan automatik dan penyerahan manual Dalam pangkalan data MySQL, urus niaga ialah satu set penyata SQL sama ada semua pelaksanaan berjaya atau semua pelaksanaan gagal, memastikan ketekalan dan integriti data. Dalam MySQL, urus niaga boleh dibahagikan kepada penyerahan automatik dan penyerahan manual Perbezaannya terletak pada masa penyerahan transaksi dan skop kawalan ke atas transaksi. Berikut akan memperkenalkan perbezaan antara penyerahan automatik dan penyerahan manual secara terperinci, dan memberikan contoh kod khusus untuk digambarkan. 1. Hantar secara automatik dalam MySQL, jika ia tidak dipaparkan

Analisis penyelesaian kepada masalah pengurusan transaksi yang dihadapi dalam pembangunan teknologi MongoDB Apabila aplikasi moden menjadi semakin kompleks dan besar, keperluan pemprosesan transaksi untuk data juga semakin tinggi dan lebih tinggi. Sebagai pangkalan data NoSQL yang popular, MongoDB mempunyai prestasi dan kebolehskalaan yang sangat baik dalam pengurusan data. Walau bagaimanapun, MongoDB agak lemah dalam ketekalan data dan pengurusan transaksi, menimbulkan cabaran kepada pembangun. Dalam artikel ini, kami akan meneroka isu pengurusan transaksi yang dihadapi dalam pembangunan MongoDB dan mencadangkan beberapa penyelesaian.

1. Pengenalan kepada PDO PDO ialah perpustakaan sambungan PHP, yang menyediakan cara berorientasikan objek untuk mengendalikan pangkalan data. PDO menyokong pelbagai pangkalan data, termasuk Mysql, postgresql, oracle, SQLServer, dll. PDO membolehkan pembangun menggunakan API bersatu untuk mengendalikan pangkalan data yang berbeza, yang membolehkan pembangun bertukar dengan mudah antara pangkalan data yang berbeza. 2. PDO menyambung ke pangkalan data Untuk menggunakan PDO untuk menyambung ke pangkalan data, anda perlu mencipta objek PDO terlebih dahulu. Pembina objek PDO menerima tiga parameter: jenis pangkalan data, nama hos, nama pengguna pangkalan data dan kata laluan. Sebagai contoh, kod berikut mencipta objek yang bersambung ke pangkalan data mysql: $dsn="mysq

Prinsip dan senario aplikasi urus niaga MySQL Dalam sistem pangkalan data, urus niaga ialah satu set operasi SQL sama ada semua dilaksanakan dengan jayanya atau semuanya gagal dan digulung semula. Sebagai sistem pengurusan pangkalan data hubungan yang biasa digunakan, MySQL menyokong ciri-ciri transaksi dan boleh memastikan bahawa data dalam pangkalan data adalah konsisten, terpencil, tahan lama dan atom. Artikel ini akan bermula dengan prinsip asas transaksi MySQL, memperkenalkan senario aplikasinya, dan menyediakan contoh kod khusus untuk rujukan pembaca. Prinsip transaksi MySQL: My

Skyworth Security baru-baru ini mengeluarkan produk terbaharu utama tahunannya - Skyworth Smart Screen Camera S50. Sebagai kamera skrin pintar pertama yang dilengkapi dengan teknologi kecerdasan buatan dalam industri, ciri terbesar Skyworth Smart Screen Camera S50 ialah ia bijak menggabungkan skrin pintar berwarna dengan kamera untuk merealisasikan fungsi inovatif panggilan video dua hala; Kuasa pengkomputeran 2T menjadikannya Keupayaan kecerdasan buatan telah dipertingkatkan dengan banyaknya Produk unggulan baharu tahun ini mempunyai rupa futuristik, bahan beku yang halus, dan dilengkapi dengan skrin definisi tinggi boleh sentuh berwarna-warni dengan operasi dua hala yang lancar interkom video, panggilan video WeChat 500W Kualiti gambar yang sangat jelas, pemantauan 360° tanpa bintik buta cahaya hitam yang melampau, tidak kira betapa gelapnya, ia berwarna-warni seperti zum pintar 12x; setiap butiran dengan jelas apabila anda mengezum masuk; kandungan yang ditulis semula ialah: 2

Transaksi memastikan integriti data pangkalan data, termasuk atomicity, konsistensi, pengasingan dan ketahanan. JDBC menggunakan antara muka Sambungan untuk menyediakan kawalan transaksi (setAutoCommit, commit, rollback). Mekanisme kawalan konkurensi menyelaraskan operasi serentak, menggunakan kunci atau kawalan konkurensi optimis/pesimis untuk mencapai pengasingan transaksi untuk mengelakkan ketidakkonsistenan data.

Sambungan Objek Data PHP (PDO) menyediakan interaksi yang cekap dan berorientasikan objek dengan pelayan pangkalan data. Keupayaan pertanyaan dan kemas kini lanjutannya membolehkan pembangun melaksanakan operasi pangkalan data yang kompleks, meningkatkan prestasi dan kebolehselenggaraan kod. Artikel ini akan menyelidiki pertanyaan lanjutan dan fungsi kemas kini PDO dan membimbing anda untuk menguasai fungsinya yang berkuasa. Pertanyaan lanjutan: Menggunakan ruang letak dan parameter terikat Ruang letak dan parameter terikat ialah alat penting untuk meningkatkan prestasi pertanyaan dan keselamatan. Pemegang tempat menggunakan tanda soal (?) untuk mewakili parameter yang boleh diganti dalam pertanyaan, manakala parameter bind membolehkan anda menentukan jenis data dan nilai setiap parameter. Dengan menggunakan kaedah ini, anda boleh mengelakkan serangan suntikan SQL dan meningkatkan prestasi kerana enjin pangkalan data boleh mengoptimumkan pertanyaan lebih awal daripada masa. //Gunakan pemegang tempat $stmt=$
