Eclipse开发Hibernate应用程序_MySQL
HibernateEclipse
Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的Transaction实际上是底层的JDBC Transaction的封装,或者是JTA Transaction的封装,下面我们详细的分析:
Hibernate可以配置为JDBCTransaction或者是JTATransaction,这取决于你在hibernate.properties中的配置:
#hibernate.transaction.factory_class
net.sf.hibernate.transaction.JTATransactionFactory
#hibernate.transaction.factory_class
net.sf.hibernate.transaction.JDBCTransactionFactory
如果你什么都不配置,默认情况下使用JDBCTransaction,如果你配置为:
hibernate.transaction.factory_class
net.sf.hibernate.transaction.JTATransactionFactory
将使用JTATransaction,不管你准备让Hibernate使用JDBCTransaction,还是JTATransaction,我的忠告就是什么都不配,将让它保持默认状态,如下:
#hibernate.transaction.factory_class
net.sf.hibernate.transaction.JTATransactionFactory
#hibernate.transaction.factory_class
net.sf.hibernate.transaction.JDBCTransactionFactory
在下面的分析中我会给出原因。
一、JDBC Transaction
看看使用JDBC Transaction的时候我们的代码例子:
Session session = sf.openSession();
Transaction tx = session.beginTransactioin();
...
session.flush();
tx.commit();
session.close();
这是默认的情况,当你在代码中使用Hibernate的Transaction的时候实际上就是JDBCTransaction。那么JDBCTransaction究竟是什么东西呢?来看看源代码就清楚了:
Hibernate2.0.3源代码中的类
net.sf.hibernate.transaction.JDBCTransaction:
public void begin() throws HibernateException {
...
if (toggleAutoCommit) session.connection().setAutoCommit(false);
...
}
这是启动Transaction的方法,看到 connection().setAutoCommit(false) 了吗?是不是很熟悉?
再来看
public void commit() throws HibernateException {
...
try {
if ( session.getFlushMode()!=FlushMode.NEVER ) session.flush();
try {
session.connection().commit();
committed = true;
}
...
toggleAutoCommit();
}
这是提交方法,看到connection().commit() 了吗?下面就不用我多说了,这个类代码非常简单易懂,通过阅读使我们明白Hibernate的Transaction都在干了些什么?我现在把用Hibernate写的例子翻译成JDBC,大家就一目了然了:
Connection conn = ...; conn.setAutoCommit(false); ... conn.commit(); conn.setAutoCommit(true);
conn.close();
看明白了吧,Hibernate的JDBCTransaction根本就是conn.commit而已,根本毫无神秘可言,只不过在Hibernate中,Session打开的时候,就会自动conn.setAutoCommit(false),不像一般的JDBC,默认都是true,所以你最后不写commit也没有关系,由于Hibernate已经把AutoCommit给关掉了,所以用Hibernate的时候,你在程序中不写Transaction的话,数据库根本就没有反应。
二、JTATransaction
如果你在EJB中使用Hibernate,或者准备用JTA来管理跨Session的长事务,那么就需要使用JTATransaction,先看一个例子:
javax.transaction.UserTransaction tx = new
InitialContext().lookup("javax.transaction.UserTransaction");
Session s1 = sf.openSession();
...
s1.flush();
s1.close();
...
Session s2 = sf.openSession();
...
s2.flush();
s2.close();
tx.commit();
这是标准的使用JTA的代码片断,Transaction是跨Session的,它的生命周期比Session要长。如果你在EJB中使用Hibernate,那么是最简单不过的了,你什么Transaction代码统统都不要写了,直接在EJB的部署描述符上配置某某方法是否使用事务就可以了。
现在我们来分析一下JTATransaction的源代码, net.sf.hibernate.transaction.JTATransaction:
public void begin(InitialContext context, ...
...
ut = (UserTransaction) context.lookup(utName);
...
看清楚了吗? 和我上面写的代码 tx = new Initial Context?().lookup("javax.transaction.UserTransaction"); 是不是完全一样?
public void commit() ...
...
if (newTransaction) ut.commit();
...
JTATransaction的控制稍微复杂,不过仍然可以很清楚的看出来Hibernate是如何封装JTA的Transaction代码的。
但是你现在是否看到了什么问题? 仔细想一下,Hibernate Transaction是从Session中获得的,tx = session.beginTransaction(),最后要先提交tx,然后再session.close,这完全符合JDBC的Transaction的操作顺序,但是这个顺序是和JTA的Transactioin操作顺序彻底矛盾的!!! JTA是先启动Transaction,然后启动Session,关闭Session,最后提交Transaction,因此当你使用JTA的Transaction的时候,那么就千万不要使用Hibernate的Transaction,而是应该像我上面的JTA的代码片断那样使用才行。
总结:
1、在JDBC上使用Hibernate 必须写上Hibernate Transaction代码,否则数据库没有反应。此时Hibernate的Transaction就是Connection.commit而已
2、在JTA上使用Hibernate 写JTA的Transaction代码,不要写Hibernate的Transaction代码,否则程序会报错
3、在EJB上使用Hibernate 什么Transactioin代码都不要写,在EJB的部署描述符里面配置
|---CMT(Container Managed Transaction)
|
|---BMT(Bean Managed Transaction)
|
|----JDBC Transaction
|
|----JTA Transaction

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

AI Hentai Generator
Menjana ai hentai secara percuma.

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

Jika anda menghadapi ralat Tidak dapat menyimpan perubahan semasa menggunakan apl Foto untuk penyuntingan imej dalam Windows 11, artikel ini akan memberikan anda penyelesaian. Tidak dapat menyimpan perubahan. Ralat berlaku semasa menyimpan. Sila cuba sebentar lagi Masalah ini biasanya berlaku kerana tetapan kebenaran yang salah, kerosakan fail atau kegagalan sistem. Jadi, kami telah melakukan beberapa penyelidikan mendalam dan menyusun beberapa langkah penyelesaian masalah yang paling berkesan untuk membantu anda menyelesaikan isu ini dan memastikan anda boleh terus menggunakan apl Microsoft Photos dengan lancar pada peranti Windows 11 anda. Betulkan Tidak Dapat Menyimpan Perubahan pada Ralat Aplikasi Foto dalam Windows 11 Ramai pengguna telah bercakap tentang ralat aplikasi Microsoft Photos di forum yang berbeza

Microsoft Paint tidak berfungsi dalam Windows 11/10? Nah, ini nampaknya masalah biasa dan kami mempunyai beberapa penyelesaian hebat untuk menyelesaikannya. Pengguna telah mengadu bahawa apabila cuba menggunakan MSPaint, ia tidak berfungsi atau terbuka. Bar skrol dalam apl tidak berfungsi, ikon tampal tidak muncul, ranap sistem, dsb. Nasib baik, kami telah mengumpulkan beberapa kaedah penyelesaian masalah yang paling berkesan untuk membantu anda menyelesaikan isu dengan aplikasi Microsoft Paint. Mengapa Microsoft Paint tidak berfungsi? Beberapa sebab yang mungkin mengapa MSPaint tidak berfungsi pada Windows 11/10 PC adalah seperti berikut: Pengecam keselamatan rosak. sistem digantung

Set kepala Apple Vision Pro tidak serasi asli dengan komputer, jadi anda mesti mengkonfigurasinya untuk menyambung ke komputer Windows. Sejak pelancarannya, Apple Vision Pro telah mendapat sambutan hangat, dan dengan ciri-ciri canggih dan kebolehkendaliannya yang meluas, mudah untuk mengetahui sebabnya. Walaupun anda boleh membuat beberapa pelarasan padanya agar sesuai dengan PC anda, dan fungsinya sangat bergantung pada AppleOS, jadi fungsinya akan terhad. Bagaimanakah saya boleh menyambungkan AppleVisionPro ke komputer saya? 1. Sahkan keperluan sistem Anda memerlukan versi terkini Windows 11 (PC tersuai dan peranti Surface tidak disokong) Menyokong 64-bit 2GHZ atau pemproses pantas lebih pantas GPU berprestasi tinggi, kebanyakannya

Menghadapi masalah dengan apl Shazam pada iPhone? Shazam membantu anda mencari lagu dengan mendengarnya. Walau bagaimanapun, jika Shazam tidak berfungsi dengan betul atau tidak mengenali lagu itu, anda perlu menyelesaikannya secara manual. Membaiki apl Shazam tidak akan mengambil masa yang lama. Jadi, tanpa membuang masa lagi, ikut langkah di bawah untuk menyelesaikan isu dengan aplikasi Shazam. Betulkan 1 – Lumpuhkan Ciri Teks Tebal Teks tebal pada iPhone mungkin menjadi sebab mengapa Shazam tidak berfungsi dengan betul. Langkah 1 – Anda hanya boleh melakukan ini daripada tetapan iPhone anda. Jadi, bukalah. Langkah 2 - Seterusnya, buka tetapan "Paparan & Kecerahan" di sana. Langkah 3 - Jika anda mendapati bahawa "Teks Tebal" didayakan

Alat pengaturcaraan berbantukan AI ini telah menemui sejumlah besar alat pengaturcaraan berbantukan AI yang berguna dalam peringkat pembangunan AI yang pesat ini. Alat pengaturcaraan berbantukan AI boleh meningkatkan kecekapan pembangunan, meningkatkan kualiti kod dan mengurangkan kadar pepijat Ia adalah pembantu penting dalam proses pembangunan perisian moden. Hari ini Dayao akan berkongsi dengan anda 4 alat pengaturcaraan berbantukan AI (dan semua menyokong bahasa C# saya harap ia akan membantu semua orang). https://github.com/YSGStudyHards/DotNetGuide1.GitHubCopilotGitHubCopilot ialah pembantu pengekodan AI yang membantu anda menulis kod dengan lebih pantas dan dengan sedikit usaha, supaya anda boleh lebih memfokuskan pada penyelesaian masalah dan kerjasama. Git

Artikel ini akan membimbing anda tentang cara memindahkan foto daripada Photos Legacy ke apl Photos baharu dalam Windows 11. Microsoft telah memperkenalkan apl Foto yang diubah suai dalam Windows 11, memberikan pengguna pengalaman yang lebih mudah dan kaya dengan ciri. Apl Photos baharu mengisih foto secara berbeza daripada apl PhotosLegacy yang lalu. Ia menyusun foto ke dalam folder seperti fail Windows lain dan bukannya mencipta album. Walau bagaimanapun, pengguna yang masih menggunakan aplikasi Photos Legacy boleh memindahkan foto mereka ke versi baharu Microsoft Photos dengan mudah. Apa itu Phot

0xc0000142 merujuk kepada kod ralat dalam sistem Windows, dan ia biasanya berkaitan dengan masalah program atau aplikasi tidak bermula atau berjalan dengan betul. Apabila pengguna cuba membuka program, sistem memaparkan mesej ralat "0xc0000142" dan program tidak boleh terus berjalan. Jadi, mengapa ralat 0xc0000142 berlaku? Terdapat banyak sebab untuk kod ralat ini, berikut adalah beberapa punca dan penyelesaian biasa. Fail konfigurasi rosak: Fail konfigurasi sesetengah program mungkin rosak, menyebabkan

Semasa belajar di sekolah menengah, sesetengah pelajar mengambil nota yang sangat jelas dan tepat, mengambil lebih banyak nota daripada yang lain dalam kelas yang sama. Bagi sesetengah orang, mencatat nota adalah hobi, manakala bagi yang lain, ia adalah satu keperluan apabila mereka mudah melupakan maklumat kecil tentang apa-apa perkara penting. Aplikasi NTFS Microsoft amat berguna untuk pelajar yang ingin menyimpan nota penting di luar kuliah biasa. Dalam artikel ini, kami akan menerangkan pemasangan aplikasi Ubuntu pada Ubuntu24. Mengemas kini Sistem Ubuntu Sebelum memasang pemasang Ubuntu, pada Ubuntu24 kita perlu memastikan bahawa sistem yang baru dikonfigurasikan telah dikemas kini. Kita boleh menggunakan "a" yang paling terkenal dalam sistem Ubuntu
