2015-01-27 11 views
24

Wir verwenden JDBC seit sehr langer Zeit in unseren Webanwendungen. Der Hauptgrund, warum wir es benutzt haben, ist, weil wir 100% Kontrolle über den Code haben, sql und Dinge von unseren Händen reparieren. Außerdem haben wir Trigger in der Datenbank verwendet, und die Datenbank wird von DB Experten separat entwickelt.JDBC VS Hibernate

Allerdings empfehlen viele jetzt Hibernate, so dass wir auch darüber nachgedacht haben, es zu verwenden. Aber wir fanden die folgenden Probleme.

  1. Hibernate kann keine Verbindung mit einer "vorhandenen" Datenbank herstellen. Es versucht immer ein eigenes zu schaffen.

  2. Unsere Datenbank greift möglicherweise auf dieselbe Anwendung zu, die sich auf verschiedenen Plattformen (Cloud, Server, VPS, Personal Computer) befindet. Hibernate kann in diesem Fall aufgrund seiner Zwischenspeicherung Probleme verursachen.

  3. Wir möchten nie die "Tabelle, die Arbeit" dem Java-Code geben. Wir erstellen Tabellen immer manuell.

  4. Wir müssen möglicherweise sehr lange und komplexe SQL-Anweisungen verwenden. Letztes Mal haben wir eine Anweisung mit mehr als 150 Zeilen verwendet, die mehr als 20 Tabellen umfasst. Wir bezweifeln, dass wir Probleme haben werden, wenn es um Hibernate geht.

  5. Unser SQL-Code ist nett und Standard. Hibernate-generierter Code scheint für uns etwas dreckig zu sein.

  6. Wir verwenden immer MySQL. Niemals eine andere DB benutzen.

  7. Die Anwendung, die wir erstellen, erfordert maximale Sicherheit, bezogen auf medizinische. Wenn mindestens ein Datensatz durchgelaufen ist, sind wir fertig.

  8. Es gibt viele foreign keys, Primary Keys, Composite Keys, Unique Keys etc etc in der Datenbank. In Foren beklagten sich einige, dass Hibernate damit zu tun hatte.

  9. Wir beschlossen, zu versuchen, überwintern, weil einige Leute behauptet: „Sind Sie Software Engineers? Sie verwenden bereits tot JDBC !!“.

diese Anbetracht, lass es mich wissen, ob die oben genannten Punkte sind eigentlich wahr (wie ich schon sagte, ich habe sie durch googeln, diskussionen etc. kennengelernt) oder nicht. Und was sind die Vor- und Nachteile von Hibernate VS Java JDBC?

+4

1 + 3: Sie müssen nicht in der Ruhe erstellen lassen die Tabellen für Sie. 2: Sie müssen kein Caching verwenden. 4 + 5: Das verstehe ich. Vielleicht möchtest du ja auf jOOQ schauen. Tippen Sie Java DSL für handgeschriebenes SQL ein, ohne in ORM zu gelangen. 6: Hibernate unterstützt MySQL. 7: Das scheint eine ganz andere Frage ist (hat nichts mit dem zu tun, was den Datenbankzugriff Bibliothek Sie verwenden) – Thilo

+0

@ Alex: Danke für die Antwort. Ich habe 2 weitere Punkte hinzugefügt, bitte werfen Sie einen Blick darauf. –

+0

@Thilo: Danke für den Kommentar. Ich habe 2 weitere Punkte hinzugefügt, bitte schaut es euch an. –

Antwort

28

Beantwortung oben aufgeführten Fragen:

1. Hibernate kann nicht mit einer "Bestehenden" Datenbank anbinden. Es versucht immer ein eigenes zu schaffen.

Das ist falsch. Hibernate kann mit einer vorhandenen Datenbank verbinden, und es versucht nicht immer, es neu zu erstellen. Sie sollten nur von Parameter wie hbm2ddl. auto drehen.

2. Unsere Datenbank greift möglicherweise auf dieselbe Anwendung zu, die sich auf verschiedenen Plattformen befindet (Cloud, Server, VPS, Personal Computer). Hibernate kann in diesem Fall aufgrund seiner Zwischenspeicherung Probleme verursachen.

Hibernate hat einen einstellbaren Cache, also ist dies auch kein Problem.

3. Wir geben dem Java-Code niemals die "Tabelle, die Arbeit schafft". Wir erstellen Tabellen immer manuell.

Kein Problem. Siehe Seite 1 oben. Außerdem gibt es mehrere praktische Bibliotheken für die Erstellung und Aktualisierung von indirekten Tabellen (z. B. liquibase), die perfekt in Paaren mit Ruhezustand verwendet werden können.

4. Wir müssen möglicherweise sehr lange und komplexe SQL-Anweisungen verwenden. Letztes Mal haben wir eine Anweisung mit mehr als 150 Zeilen verwendet, die mehr als 20 Tabellen umfasst. Wir bezweifeln, dass wir Probleme haben werden, wenn es um Hibernate geht.

Sie können immer direkte JDBC-Aufrufe verwenden und native SQL-Abfragen über Hibernate aufrufen, wenn dies erforderlich ist.

5. Unser SQL-Code ist nett und Standard. Hibernate-generierter Code scheint für uns etwas dreckig zu sein.

Nochmals, wenn Sie einige Logik komplizierte SQL-Code anstelle von Ruhezustand automatisch generiert - Sie können es tun.

6. Wir verwenden immer MySQL. Niemals eine andere DB benutzen.

Kein Problem überhaupt. Hibernate hat spezielle MySQL-Dialekt-Unterstützung: org.hibernate.dialect.MySQLDialect.

7. Die Anwendung, die wir erstellen, erfordert maximale Sicherheit, bezogen auf medizinische. Wenn mindestens ein Datensatz durchgelaufen ist, sind wir fertig.

Sicherheitsprobleme beziehen sich nicht auf ORM-Techniken. Hibernate ist nur eine logische und praktische objektorientierte Schicht zwischen reinen Datenbank-JDBC-Aufrufen und Programmierwerkzeugen. Es beeinflusst irgendwie nicht die allgemeine Netzsicherheit.

0

Hier sind die schnellen Antworten, die ich kenne

1) Sie zu einer bestehenden Datenbank verbinden kann. Aber ja, wie here erklärte

Wenn Sie nicht über ein festes Objekt-Modell haben, würde ich sagen, dass Hibernate ist eine schreckliche Wahl.

2) Da auf die Datenbank von verschiedenen Anwendungen aus zugegriffen wird, können Sie Sperren beibehalten. Auf der anderen Seite können Sie trun-off Caching als getan here.

3) Sie können Tabellen manuell erstellen und mit der Datei .hbm.xml verbinden.

4) Sie können jede Art von Abfrage im Ruhezustand wie einfache SQL-Abfragen Kriterien verwenden.

5) Sie können SQL-Code in Hibernate direkt verwenden, wenn Sie möchten. Eine andere Möglichkeit ist die Verwendung von Kriterien.

6) Hibernate ist NICHT DB-spezifisch. Sie können für jede Datenbank gehen und sie mit Hibernate verbinden.

7) Mit Sperren und Rechte in der Datenbank können Sie die Sicherheit erhalten.

8) Vereinbart, dass Fremdschlüssel in Hibernate unordentlich sind Wenn Sie es nicht gut behandeln. Also verwenden Sie OO-Ansatz und halten Kaskaden gut, dann wird Hibernate eine gute Wahl sein.

+0

Was meinten Sie mit 'solid object model'? –

+0

Mit 'solid object model' meine ich, dass Sie die Datenbank auf JAVA-Dateien Objektorientierte Weise abbilden, d. H. Eine Beziehung pflegen und die Fremdschlüssel auf OO-Weise abbilden. – Junaid

3

Mit einfachen alten JDBC, bedeutet nicht, dass Sie in der IT-Branche fehlt, sondern Hibernate verwendet auch JDBC in der zugrunde liegenden Schicht.

Welche Vorteile gibt es uns, wonach wir suchen sollten.

1.) Cache Mechanismus.

2.) Managing sessions, transactions usw.

3.) reduzieren Bemühungen schriftlich Anfragen, mehr Dienstprogramme von Hibernate wie Query API, Criteria API, HQL

Die Fragen, die Sie angesprochen haben, sind mehr oder weniger abgedeckt in Hibernate docs.

Auch gibt viel mehr Caching-Strategie zur Verfügung ehcache, Infinispan, hängt von dem Server, den wir bereitstellen, JBOSS, Weblogic, Tomcat usw. ++ Umgebung wie Cloud, verteilten Cache usw.

Hibernate bietet Ihnen noch mit Möglichkeit, das Schema automatisch zu deaktivieren und auf den von Ihnen erstellten zu zeigen.

16

Hibernate ist ein großartiges Werkzeug und Sie finden reichlich documentations, books und blog articles darüber.

Ich werde Adresse alle Ihre Anliegen:

Hibernate kann nicht mit einer „Bestehende“ Datenbank anbinden. Es versucht immer ein eigenes zu schaffen.

Hibernate sollte eine separate Datenbank Schema Management-Prozedur auch für integration testing verwenden. Sie sollten ein inkrementelles Versionstool wie FlywayDB verwenden, um Ihre Schemaänderungen zu verwalten.

Unsere Datenbank greift möglicherweise auf dieselbe Anwendung zu, die sich auf verschiedenen Plattformen befindet (Cloud, Server, VPS, Personal Computer). Hibernate kann in diesem Fall aufgrund seiner Zwischenspeicherung Probleme verursachen.

Sie müssen nicht den Cache der 2. Ebene verwenden, der Caching-Implementierungen von Drittanbietern verwendet. Alle Caching-Lösungen können transactional consistency brechen. Der First-Level-Cache garantiert liest und mit der optimistischen Verriegelung können Sie verhindern, lost updates.

Wir geben dem Java-Code niemals die "Tabelle, die Arbeit schafft". Wir erstellen Tabellen immer manuell.

Die Datenbankverwaltung sollte von Ihrem ORM-Tool getrennt sein. Das ist sowieso eine Best Practice.

Wir müssen möglicherweise sehr lange und komplexe SQL-Anweisungen verwenden.Letztes Mal haben wir eine Anweisung mit mehr als 150 Zeilen verwendet, die mehr als 20 Tabellen umfasst. Wir bezweifeln, dass wir Probleme haben werden, wenn es um Hibernate geht.

Hibernate eignet sich hervorragend für Schreibvorgänge und zur Steuerung des gemeinsamen Zugriffs. Für erweiterte Abfragen (Fensterfunktionen, CTE) müssen Sie weiterhin natives SQL verwenden. Mit Hibernate können Sie jedoch native Abfragen ausführen.

Unser SQL-Code ist nett und Standard. Hibernate-generierter Code scheint für uns etwas dreckig zu sein.

Sie brauchen nicht, und Sie sollten wahrscheinlich nicht das Dienstprogramm hbmdll sowieso verwenden.

Wir verwenden immer MySQL. Niemals eine andere DB benutzen.

das ist noch besser. Sie können daher native Abfragen im Voraus verwenden, ohne Probleme mit der Datenbankportabilität zu berücksichtigen.

Die Anwendung, die wir erstellen, erfordert maximale Sicherheit, bezogen auf medizinische. Wenn mindestens ein Datensatz durchgelaufen ist, sind wir fertig.

Hibernate hindert Sie nicht daran, Ihre Datenbank oder den Datenzugriffscode zu sichern. Sie können weiterhin Sicherheitsmaßnahmen für die Datenbank mit Hibernate verwenden. Sie können sogar Jasypt verwenden, um alle Arten von sicherheitsrelevanten Funktionen zu aktivieren:

  • erweiterte Passwort-Hashing
  • Zwei-Wege-Verschlüsselung

Es gibt viele Fremdschlüssel, Primärschlüssel, Composite Keys , Eindeutige Schlüssel usw. in der Datenbank. In Foren beklagten sich einige, dass Hibernate damit zu tun hatte.

Alle diese werden von Hibernate unterstützt. Abgesehen von den JPA Konventionen, auch Hibernate bietet particular mapping für jede exotische Mapping.

Wir entschieden uns überwintern, um zu versuchen, weil einige Leute behauptet: „Sind Sie Software Engineers? Sie sind bereits tot JDBC verwenden !!.“

Das ist nicht das richtige Argument für Sie bereits aus einer Bibliothek Schalt Meister. Wenn Sie glauben, dass Sie von der Verwendung von Hibernate profitieren können, ist dies der einzige zwingende Grund für den Wechsel von JDBC.

Verwandte Themen