web-dev-qa-db-de.com

JDBC VS Ruhezustand

Wir verwenden JDBC schon sehr lange in unseren Webanwendungen. Der Hauptgrund, warum wir es verwendet haben, ist, dass wir 100% ige Kontrolle über den Code, das SQL und die Korrektur von Dingen haben. Außerdem haben wir Trigger in der Datenbank verwendet, und die Datenbank wird von DB-Experten separat entwickelt.

Viele empfehlen jedoch die Verwendung von Hibernate, sodass wir auch darüber nachgedacht haben. Aber wir haben die folgenden Probleme gefunden.

  1. Der Ruhezustand kann keine Verbindung zu einer "vorhandenen" Datenbank herstellen. Es wird immer versucht, eine eigene zu erstellen.

  2. Auf unsere Datenbank kann über dieselbe Anwendung, die sich auf verschiedenen Plattformen (Cloud, Server, VPS, Personal Computer) befindet, zugegriffen werden. Der Winterschlaf kann aufgrund seiner Zwischenspeicherung in dieser Situation Probleme verursachen.

  3. Wir möchten niemals die "Tabellenerstellungsarbeit" dem Java-Code überlassen. Wir erstellen Tabellen immer manuell.

  4. Möglicherweise müssen sehr lange und komplexe SQL-Anweisungen verwendet werden. Letztes Mal haben wir eine Anweisung mit mehr als 150 Zeilen verwendet, die mehr als 20 Tabellen zusammenfasste. Wir bezweifeln, dass wir in Bezug auf Hibernate Schwierigkeiten bekommen werden.

  5. Unser SQL-Code ist Nizza und Standard. Im Ruhezustand generierter Code scheint für uns ein bisschen schmutzig zu sein.

  6. Wir verwenden immer MySQL. Verwenden Sie niemals eine andere DB.

  7. Die von uns erstellte Anwendung erfordert maximale Sicherheit in Bezug auf medizinische Anwendungen. Wenn mindestens ein Datensatz durchgesickert ist, sind wir fertig.

  8. Es gibt eine Menge foreign keys, Primary Keys, Composite Keys, Unique Keys usw. in der Datenbank. In Foren beklagten sich einige darüber, dass Hibernate sich damit vermischte.

  9. Wir haben beschlossen, den Ruhezustand zu versuchen, weil einige Leute behaupten, "Sind Sie Software-Ingenieure? Sie verwenden bereits JDBC!"

Bitte lassen Sie mich wissen, ob die oben genannten Punkte tatsächlich zutreffen (wie gesagt, ich habe sie durch Googeln, Diskussion usw. kennengelernt) oder nicht. Was sind die Vor- und Nachteile von Hibernate VS Java JDBC?

26

Beantwortung der oben aufgeführten Probleme:

1. Hibernate kann keine Verbindung zu einer "vorhandenen" Datenbank herstellen. Es wird immer versucht, eine eigene Datenbank zu erstellen.

Das ist falsch. Hibernate kann eine Verbindung zu einer vorhandenen Datenbank herstellen und versucht nicht immer, sie neu zu erstellen. Sie sollten nur Parameter wie hbm2ddl. auto abschalten.

2. Auf unsere Datenbank kann von derselben Anwendung, die sich auf verschiedenen Plattformen befindet (Cloud, Server, VPS, Personal Computer), zugegriffen werden. Der Hibernate-Server kann aufgrund seiner Zwischenspeicherung in dieser Situation Probleme verursachen.

Hibernate hat einen anpassbaren Cache, so dass dies auch kein Problem darstellt.

3. Wir möchten niemals die "Tabellenerstellungsarbeit" an den Java-Code übergeben. Wir erstellen Tabellen immer manuell.

Kein Problem. Siehe Seite 1 oben. Darüber hinaus gibt es mehrere praktische Bibliotheken für die Erstellung und Aktualisierung von indirekten Tabellen (z. B. liquibase ), die in Verbindung mit dem Winterschlaf perfekt 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 zusammenfasste. Wir bezweifeln, dass wir in Bezug auf Hibernate Schwierigkeiten bekommen werden.

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

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

Auch wenn Sie logisch komplizierten SQL-Code aufrufen müssen, anstatt automatisch im Ruhezustand zu arbeiten, können Sie dies tun.

6. Wir verwenden immer MySQL. Verwenden Sie niemals eine andere Datenbank.

Absolut kein Problem. Hibernate unterstützt spezielle MySQL-Dialekte: org.hibernate.dialect.MySQLDialect.

7. Die von uns erstellte Anwendung erfordert maximale Sicherheit in Bezug auf medizinische Anwendungen. Wenn mindestens ein Datensatz durchgesickert ist, sind wir fertig.

Sicherheitsaspekte beziehen sich nicht auf ORM-Techniken. Hibernate ist nur eine logische und praktische objektorientierte Schicht zwischen reinen Datenbank-JDBC-Aufrufen und Programmierwerkzeugen. Es hat keinen Einfluss auf die Netzsicherheit.

29
Andremoniy

Hibernate ist ein großartiges Werkzeug, und Sie finden zahlreiche Dokumentationen , books und Blogartikel darüber.

Ich werde alle Ihre Bedenken ansprechen:

Der Ruhezustand kann keine Verbindung zu einer "vorhandenen" Datenbank herstellen. Es wird immer versucht, eine eigene zu erstellen.

Der Ruhezustand sollte auch für Integrationstest ein separates Datenbankschema-Verwaltungsverfahren verwenden. Sie sollten ein inkrementelles Versionsverwaltungstool wie FlywayDB verwenden, um Ihre Schemaänderungen zu verwalten.

Auf unsere Datenbank kann über dieselbe Anwendung, die sich auf verschiedenen Plattformen (Cloud, Server, VPS, Personal Computer) befindet, zugegriffen werden. Der Winterschlaf kann aufgrund seiner Zwischenspeicherung in dieser Situation Probleme verursachen.

Sie müssen nicht den 2nd Level-Cache verwenden, der Caching-Implementierungen von Drittanbietern verwendet. Alle Caching-Lösungen können Transaktionskonsistenz brechen. Der Cache der ersten Ebene garantiert wiederholtes Lesen von session-level und mit der optimistischen Sperrung können Sie verlorene Aktualisierungen verhindern.

Wir möchten niemals die "Tabellenerstellungsarbeit" dem Java-Code überlassen. Wir erstellen Tabellen immer manuell.

Die Datenbankverwaltung sollte von Ihrem ORM-Tool getrennt sein. Das ist sowieso eine bewährte Methode.

Möglicherweise müssen sehr lange und komplexe SQL-Anweisungen verwendet werden. Letztes Mal haben wir eine Anweisung mit mehr als 150 Zeilen verwendet, die mehr als 20 Tabellen zusammenfasste. Wir bezweifeln, dass wir in Bezug auf Hibernate Schwierigkeiten bekommen werden.

Der Ruhezustand eignet sich hervorragend für Schreibvorgänge und für die gleichzeitige Steuerung. Für erweiterte Abfragen (Fensterfunktionen, CTE) müssen Sie weiterhin natives SQL verwenden. Im Ruhezustand können Sie jedoch native Abfragen ausführen.

Unser SQL-Code ist Nizza und Standard. Im Ruhezustand generierter Code scheint für uns ein bisschen schmutzig zu sein.

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

Wir verwenden immer MySQL. Verwenden Sie niemals eine andere DB.

Das ist sogar noch besser. Sie können daher native native Abfragen verwenden, ohne sich um Datenbank-Portabilitätsprobleme zu kümmern. 

Die von uns erstellte Anwendung erfordert maximale Sicherheit in Bezug auf medizinische Anwendungen. Wenn mindestens ein Datensatz durchgesickert ist, sind wir fertig.

Der Ruhezustand verhindert nicht, dass Sie Ihre Datenbank oder den Datenzugriffscode sichern. Sie können Datenbanksicherheitsmaßnahmen auch weiterhin mit Hibernate verwenden. Sie können sogar Jasypt verwenden, um alle möglichen Sicherheitsfunktionen zu aktivieren:

  • erweitertes Passwort-Hashing
  • zweiwegeverschlüsselung 

Es gibt viele Fremdschlüssel, Primärschlüssel, Verbundschlüssel, Eindeutige Schlüssel usw. in der Datenbank. In Foren beklagten sich einige darüber, dass Hibernate sich damit vermischte.

Alle diese werden von Hibernate unterstützt. Abgesehen von den JPA-Konventionen bietet Hibernate auch bestimmtes Mapping für jedes exotische Mapping an.

Wir haben beschlossen, den Ruhezustand zu versuchen, weil einige Leute behaupten: "Sind Sie Software-Entwickler? Sie verwenden bereits totes JDBC !!."

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

17
Vlad Mihalcea

Die Verwendung von normalem alten JDBC bedeutet nicht, dass Sie in der IT-Branche nicht fehlen, vielmehr verwendet Hibernate JDBC in der darunter liegenden Schicht.

Welche Vorteile bringt uns das, wonach wir suchen sollen.

1.) Cache Mechanismus.

2.) Verwalten von sessions, transactions usw.

3.) Reduzieren Sie den Aufwand beim Schreiben von Abfragen, mehr Hilfsprogramme für den Ruhezustand wie Query API, Criteria API, HQL

Die Fragen, die Sie gestellt haben, sind mehr oder weniger in Hibernate-Dokumenten enthalten.

Außerdem gibt es viel mehr Caching-Strategie für E-Cache, Infinispan, abhängig von dem Server, den wir bereitstellen, JBOSS, Weblogic, Tomcat usw. ++ - Umgebung wie Cloud, verteiltem Cache usw.

Im Ruhezustand haben Sie weiterhin die Möglichkeit, die automatische Erstellung des Schemas zu deaktivieren und auf das von Ihnen erstellte zu zeigen.

3
Ankur Singhal

Hier sind die schnellen Antworten, die ich kenne

1) Sie können eine Verbindung zu einer vorhandenen Datenbank herstellen. Aber ja wie gesagt hier

Wenn Sie kein solides Objektmodell haben, würde ich sagen, dass Hibernate ein .__ ist. schreckliche Wahl.

2) Wenn auf Ihre Datenbank von verschiedenen Anwendungen aus zugegriffen wird, können Sie Sperren beibehalten. Auf der anderen Seite können Sie trun-off zwischenspeichern hier .

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

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

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

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

7) Durch Sperren und Vergabe von Rechten in der Datenbank können Sie die Sicherheit aufrechterhalten.

8) Vereinbart, dass Fremdschlüssel im Ruhezustand unordentlich sind Wenn Sie nicht gut damit umgehen. Verwenden Sie also den Ansatz von OO und behalten Sie die Kaskaden gut bei.

0
Junaid