Sesi: adalah sesi antara aplikasi dan database, pusat operasi hibernasi dan dasar operasi lapisan persistensi. Siklus hidup objek/manajemen transaksi/akses database terkait erat dengan sesi.
Objek sesi dibangun melalui sessionFactory. Berikut adalah contoh untuk memperkenalkan dua cara untuk mendapatkan sesi oleh Hibernate.
Log adalah perhatian yang sangat umum dalam pemrograman. Ketika pengguna beroperasi pada database, mereka perlu merekam rangkaian operasi ini untuk melacak dinamika database. Jadi ketika pengguna memasukkan catatan ke dalam database, mereka harus merekam catatan dalam file log. Serangkaian operasi pengguna harus dilakukan dalam suatu sesi, jika tidak, ini akan menjadi dua utas. Tidak ada jaminan sinkronisasi. Lihat kode berikut
Alat Sesi Manajemen Hibernateutil
package com.bjpowernode.usermgr.util;import org.hibernate.Session;//hibernate3's import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class HibernateUtils {private static SessionFactory factory;static{try{//Read hibernate.cfg.xml file Configuration cfg=new Configuration().configure();//Create SessionFactory factory=cfg.buildSessionFactory();}catch(Exception e){e.printStackTrace();}}//Get the open Session public static Session getSession(){return factory.openSession();}//Close Session public static void closeSession(Session sesi) {if (session! = null) {if (session.isopen ()) {session.close ();}}} public static sessionFacTory getSessionFactory () {return factory;}}}Lapisan Logika Bisnis Pengguna
Paket com.bjpowernode.usermgr.manager; import java.util.date; impor org.hibernate.Session; import com.bjpowernode.usermgr.domain.log; import com.bjpowernode.usermgr.domain.user; impor com.bjpowernode.usermgr.usermgeril.usermgr.domain.user; com.bjpowernode.usermgr.usermgeril {/** * Keduanya menambahkan pengguna dan menambahkan log menggunakan sesi yang sama, jadi * saat menambahkan pengguna gagal, log juga akan gagal. Transaction Rollback* Pengguna menambahkan log sukses dan juga akan menambahkan keberhasilan*/public void addUser (pengguna pengguna) {session session = null; coba {// dapatkan sesi utas saat ini = hibernateutils.getSessionFactory (). GetCurrentSession (); session.begintransaction (); // simpan sesi pengguna. Log "); log.settime (tanggal baru ()); log.setDetail (" xxx "); logManager LogManager = new LogManagerImpl (); // simpan log LogManager.addlog (log); session.getTransaction ().Kelas Implementasi Log:
package com.bjpowernode.usermgr.manager;import org.hibernate.Session;import com.bjpowernode.usermgr.domain.Log;import com.bjpowernode.usermgr.util.HibernateUtils;public class LogManagerImpl implements LogManager {public void addLog(Log log) {//Get Session of the current thread Hibernateutils.getSessionFactory (). GetCurrentSession (). Save (log);}}Kelas tes
package com.bjpowernode.usermgr.manager;import junit.framework.TestCase;import com.bjpowernode.usermgr.domain.User;public class UserManagerImplTest extends TestCase {public void testAddUser() {UserManager userManager=new UserManagerImpl();User user=new User(); user.setname ("Zhang San"); userManager.adduser (pengguna); }Melihat:
1. Apa perbedaan antara opensesi dan getCurrentsession?
*OpenSesi harus ditutup, arus akan ditutup secara otomatis setelah transaksi selesai.
*Opensesi tidak terikat pada utas saat ini, arus terikat pada utas saat ini
2. Jika Anda menggunakan arus, Anda perlu mengonfigurasinya di file hibernate.cfg.xml:
*Jika itu adalah transaksi lokal (transaksi JDBC)
<propertyname = "hibernate.current_session_context_class"> utas </prop Property>
*Jika itu adalah transaksi global (transaksi JTA)
<propertyname = "hibernate.current_session_context_class"> jta </preate>
Transaksi Global: Transaksi yang dikelola dan dikoordinasikan oleh Explorer yang dapat menjangkau banyak database dan proses. Manajer sumber daya umumnya menggunakan protokol pengiriman dua tahap XA untuk berinteraksi dengan "Sistem Informasi Perusahaan" (EIS) atau database.
Transaksi Lokal: Transaksi lokal ke EIS atau database tunggal dan terbatas pada satu proses. Transaksi lokal tidak melibatkan banyak sumber data.
Meringkaskan
Di atas adalah seluruh konten artikel ini tentang dua contoh kode untuk mendapatkan sesi di Hibernate. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke:
Analisis contoh penambahan, menghapus, merevisi dan mencari melalui sesi
Pelajari dengan cepat tentang sesi di Hibernate
Hibernate menggunakan HBM.XML untuk mengonfigurasi analisis hubungan pemetaan
Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!