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

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Wenn bei der Verwendung der Fotos-App zur Bildbearbeitung in Windows 11 der Fehler „Änderungen können nicht gespeichert werden“ auftritt, finden Sie in diesem Artikel Lösungen. Änderungen können nicht gespeichert werden. Beim Speichern ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut. Dieses Problem tritt normalerweise aufgrund falscher Berechtigungseinstellungen, einer Dateibeschädigung oder eines Systemfehlers auf. Deshalb haben wir eine gründliche Recherche durchgeführt und einige der effektivsten Schritte zur Fehlerbehebung zusammengestellt, um Ihnen bei der Lösung dieses Problems zu helfen und sicherzustellen, dass Sie die Microsoft Fotos-App weiterhin nahtlos auf Ihrem Windows 11-Gerät verwenden können. Behebung des Fehlers „Änderungen an der Fotos-App konnten nicht gespeichert werden“ in Windows 11. Viele Benutzer haben in verschiedenen Foren über den Fehler in der Microsoft Fotos-App gesprochen

Microsoft Paint funktioniert nicht unter Windows 11/10? Nun, das scheint ein häufiges Problem zu sein und wir haben einige großartige Lösungen, um es zu beheben. Benutzer haben sich darüber beschwert, dass MSPaint beim Versuch, es zu verwenden, nicht funktioniert oder geöffnet wird. Bildlaufleisten in der App funktionieren nicht, Einfügesymbole werden nicht angezeigt, Abstürze usw. Glücklicherweise haben wir einige der effektivsten Methoden zur Fehlerbehebung zusammengestellt, die Ihnen bei der Lösung von Problemen mit der Microsoft Paint-App helfen. Warum funktioniert Microsoft Paint nicht? Einige mögliche Gründe, warum MSPaint auf einem Windows 11/10-PC nicht funktioniert, sind folgende: Die Sicherheitskennung ist beschädigt. hängendes System

Das Apple Vision Pro-Headset ist nicht nativ mit Computern kompatibel, daher müssen Sie es für die Verbindung mit einem Windows-Computer konfigurieren. Seit seiner Einführung ist Apple Vision Pro ein Hit, und angesichts seiner hochmodernen Funktionen und umfassenden Bedienbarkeit ist es leicht zu verstehen, warum. Obwohl Sie einige Anpassungen daran vornehmen können, um es an Ihren PC anzupassen, und seine Funktionalität stark von AppleOS abhängt, ist die Funktionalität daher eingeschränkt. Wie verbinde ich AppleVisionPro mit meinem Computer? 1. Überprüfen Sie die Systemanforderungen. Sie benötigen die neueste Version von Windows 11 (benutzerdefinierte PCs und Surface-Geräte werden nicht unterstützt). Unterstützt 64-Bit, 2 GHz oder schneller, schneller Prozessor, meist leistungsstarke GPU

Haben Sie Probleme mit der Shazam-App auf dem iPhone? Shazam hilft Ihnen, Lieder zu finden, indem Sie sie anhören. Wenn Shazam jedoch nicht richtig funktioniert oder den Song nicht erkennt, müssen Sie den Fehler manuell beheben. Die Reparatur der Shazam-App wird nicht lange dauern. Befolgen Sie also, ohne noch mehr Zeit zu verlieren, die folgenden Schritte, um Probleme mit der Shazam-App zu beheben. Fix 1 – Deaktivieren Sie die Funktion für fetten Text. Fetter Text auf dem iPhone kann der Grund dafür sein, dass Shazam nicht richtig funktioniert. Schritt 1 – Sie können dies nur über Ihre iPhone-Einstellungen tun. Also, öffnen Sie es. Schritt 2 – Als nächstes öffnen Sie dort die Einstellungen „Anzeige & Helligkeit“. Schritt 3 – Wenn Sie feststellen, dass „Fetttext“ aktiviert ist

Dieses KI-gestützte Programmiertool hat in dieser Phase der schnellen KI-Entwicklung eine große Anzahl nützlicher KI-gestützter Programmiertools zu Tage gefördert. KI-gestützte Programmiertools können die Entwicklungseffizienz verbessern, die Codequalität verbessern und Fehlerraten reduzieren. Sie sind wichtige Helfer im modernen Softwareentwicklungsprozess. Heute wird Dayao Ihnen 4 KI-gestützte Programmiertools vorstellen (und alle unterstützen die C#-Sprache). https://github.com/YSGStudyHards/DotNetGuide1.GitHubCopilotGitHubCopilot ist ein KI-Codierungsassistent, der Ihnen hilft, Code schneller und mit weniger Aufwand zu schreiben, sodass Sie sich mehr auf Problemlösung und Zusammenarbeit konzentrieren können. Git

In diesem Artikel erfahren Sie, wie Sie Fotos von Photos Legacy in die neue Fotos-App in Windows 11 migrieren. Microsoft hat in Windows 11 eine überarbeitete Foto-App eingeführt, die Benutzern ein einfacheres und funktionsreicheres Erlebnis bietet. Die neue Fotos-App sortiert Fotos anders als die vorherige PhotosLegacy-App. Es organisiert Fotos wie andere Windows-Dateien in Ordnern, anstatt Alben zu erstellen. Benutzer, die weiterhin die Photos Legacy-App verwenden, können ihre Fotos jedoch problemlos auf die neue Version von Microsoft Photos migrieren. Was ist Phot?

0xc0000142 bezieht sich auf den Fehlercode in Windows-Systemen und hängt normalerweise mit dem Problem zusammen, dass ein Programm oder eine Anwendung nicht richtig gestartet oder ausgeführt wird. Wenn ein Benutzer versucht, ein Programm zu öffnen, zeigt das System die Fehlermeldung „0xc0000142“ an und das Programm kann nicht weiter ausgeführt werden. Warum tritt also der Fehler 0xc0000142 auf? Es gibt viele Gründe für diesen Fehlercode. Hier finden Sie einige häufige Ursachen und Lösungen. Beschädigte Konfigurationsdateien: Die Konfigurationsdateien einiger Programme können beschädigt sein

Während des Lernens in der Oberstufe machen sich einige Schüler sehr klare und genaue Notizen und machen sich mehr Notizen als andere in derselben Klasse. Für manche ist das Notieren ein Hobby, für andere ist es eine Notwendigkeit, wenn sie leicht kleine Informationen über etwas Wichtiges vergessen. Die NTFS-Anwendung von Microsoft ist besonders nützlich für Studierende, die wichtige Notizen außerhalb der regulären Vorlesungen speichern möchten. In diesem Artikel beschreiben wir die Installation von Ubuntu-Anwendungen auf Ubuntu24. Aktualisieren des Ubuntu-Systems Vor der Installation des Ubuntu-Installationsprogramms müssen wir auf Ubuntu24 sicherstellen, dass das neu konfigurierte System aktualisiert wurde. Wir können das bekannteste „a“ im Ubuntu-System verwenden
