Frage

Meine Entwickler einen Bürgerkrieg zu führen. In einem Lager, haben sie Hibernate und Spring umarmen. Im anderen Lager haben sie Frameworks denunziert - sie sind angesichts obwohl Hibernate

.

Die Frage ist: Gibt es irgendwelche bösen Überraschungen, Schwächen oder pit-fällt, dass Neuling Hibernate-Spring Konvertiten sind wahrscheinlich stolpern auf

?

PS: Wir haben eine DAO-Bibliothek, die nicht sehr anspruchsvoll ist. Ich bezweifle, dass es Hibernate Reichtum hat, aber es ist eine Art von Reife erreicht (das heißt, es ist nicht in den letzten Projekten geändert es enthält).

War es hilfreich?

Lösung

ich Hibernate habe einige Male in der Vergangenheit verwendet. Jedes Mal, dass ich in Grenzfälle laufen, wo die Syntax in eine Schnitzeljagd durch die Dokumentation, Google und alte Versionen dezentralisierten bestimmen. Es ist ein mächtiges Werkzeug, aber schlecht dokumentiert (letzte, was ich sah).

Wie für Frühling, fast jeden Job, den ich für ein Interview habe oder sah in den letzten Jahren bei beteiligt Frühling, es ist wirklich zum De-facto-Standard für Java / Web. Mit wird es Ihre Entwickler helfen, in Zukunft mehr marktfähig zu sein, und es wird dir helfen, wie Sie einen großen Pool von Menschen haben werden, die Ihre Anwendung verstehen würde.

Schreiben Sie Ihre eigenen Rahmen ist verlockend, Bildungs-und Spaß. Nicht so toll auf die Ergebnisse.

Andere Tipps

Sie haben gekündigt Rahmenbedingungen

Das ist verrückt. Wenn Sie nicht ein Off-the-shelf Framework verwenden, dann erstellen Sie Ihre eigenen. Es ist immer noch ein Rahmen.

Hibernate hat Macken sicher zu sein, aber das liegt daran, dass das Problem, das es zu lösen versucht, ist komplex. Jedes Mal, wenn jemand über Hibernate klagt ich sie von all den langweiligen DAO-Code erinnern, dass sie halten müssen, wenn sie es nicht verwenden.

Ein paar Tipps:

  • Ruhezustand ist kein Ersatz für ein gutes Datenbank-Design. Hibernate-Schemata sind in Ordnung, aber Sie müssen sie gelegentlich zwicken
  • Schließlich wollen Sie müssen verstehen, wie Hibernate faul lädt Klassen und wie das wirkt sich die Dinge. Hibernate modifiziert den Java-Bytecode und Sie müssen in die Tiefe früher vertiefen oder später, wenn nur zu erklären, warum Objektverknüpfungen sind null.
  • Verwenden Sie Anmerkungen, wenn Sie können.
  • Nehmen Sie die Zeit, die Hibernate Performance-Tuning Techniken zu erlernen, wird es Ihnen auf lange Sicht speichern.

Wenn Sie eine ziemlich komplexe Datenbank, Hibernate möglicherweise nicht für Sie sein. Bei der Arbeit haben wir eine ziemlich komplexe Datenbank mit vielen Daten und Hibernate nicht wirklich für uns arbeiten. Wir haben mit iBATIS stattdessen gestartet. Allerdings weiß ich viel Entwicklungs Geschäfte, die Hibernate erfolgreich nutzen - und es für Sie tut viel Routinearbeit tun - so ist es eine Überlegung wert

.

Der Frühling ist ein gutes Werkzeug, wenn Sie wissen, wie es richtig zu nutzen.

Ich würde sagen, dass Gerüste sind auf jeden Fall eine gute Sache - wie andere haben darauf hingewiesen, Sie wollen nicht das Rad neu zu erfinden. Frühling enthält viele Module bedeuten, die Sie nicht so viel Code zu schreiben. Erliegen Sie nicht auf das "Not Invented Here" -Syndrom!

Lazy Loading ist die große Gotcha in MVC-Anwendungen, die Hibernate für ihre Persistenz-Framework verwenden. Sie laden das Objekt in der Steuerung und an die JSP Ansicht übergeben. Einige oder alle Mitglieder der Klasse werden proxied und alles explodiert, weil du Sitzung Hibernate geschlossen wurde, wenn die Steuerung beendet.

Sie müssen die Open Session in Ansicht Artikel lesen, das Problem zu verstehen und ein Lösung. Wenn Sie Frühling verwenden die diese Blog-Artikel beschreibt die Frühlings-Lösung in der offenen Sitzung in Sicht Problem.

Das ist eine Sache (ich mich erinnern konnte), dass ich in fiel, als ich in meinem Hibernate Tag war. Wenn Sie (mehr) Objekte aus einer Sammlung Kind löschen (in einer übergeordneten Einheit) und dann neue Einheiten in einer einzigen Transaktion zu derselben Sammlung hinzuzufügen, ohne in der Mitte Spülung wird Hibernate tun „Einfügen“ vor „Löschen“. Wenn das Kind Tabelle eine eindeutige Einschränkung in einer ihrer Spalten hat, und Sie erwarten, dass Sie es nicht verletzen würde, da Sie bereits einige Daten, bevor sie gelöscht haben (so wie ich war), dann machen Sie sich bereit frustriert zu sein. Hibernate Forum schlägt vor:

  1. Es war ein DB Designfehler, Redesign;
  2. flush (oder begehen, wenn man so will) zwischen den Löschungen und Einfügungen;

Ich kann nicht beides tun, und die Ruhequelle und Neukompilieren Tweaking enden. Es war nur 1 Zeile Code. Aber die Mühe zu finden, dass eine Zeile auf etwa 27 Tassen Kaffee gleich war und drei schlaflose Nächte.

Dies ist nur ein Beispiel für Probleme und Macken Sie könnten am Ende, wenn ohne wirkliche Experten in Ihrem Team Hibernate (Experten: jemand mit angemessenen Kenntnissen über die Philosophie und die internen Arbeits von Hibernate). Ihr Problem, Lösung, Liter Kaffee und schlaflose Nacht Anzahl kann variieren. Aber Sie bekommen die Idee.

Ich habe nicht viel mit Java gearbeitet, aber ich habe Arbeit in großen Gruppen von Java-Entwickler. Der Eindruck, den ich habe war, dass Frühling ist OK. Aber jeder war bei Hibernate verärgern. Die Hälfte der Mannschaft, wenn gefragt: „Wenn Sie eine Sache ändern könnten, was würden Sie ändern?“ und sie würden sagen: „Befreien Sie sich von Hibernate.“. Als ich anfing zu lernen, Hibernate es mir erstaunlich komplex geschlagen, aber ich habe nicht genug lernen (zum Glück habe ich entlang bewegt) zu wissen, ob die Komplexität gerechtfertigt war oder nicht (vielleicht war es erfordert einige komplexe Probleme zu lösen).

bekam das Team von Frühling los für Guice, aber das war eher wie eine politische Wende, zumindest aus meiner Sicht und anderen Entwicklern Ich habe gesprochen.

Ich habe immer gefunden, Hibernate ein wenig komplex und schwer zu lernen. Aber wie JPA (Java Persistence API) und Unterstützung in Hibernate rel="nofollow. Die zusätzlichen Bonus ist, dass es möglich ist, (aber nicht mühelos) später auf die Datenbank Rahmen zu ändern, wenn nötig. Ich habe verwendet OpenJPA mit sehr guten Ergebnissen.

In letzter Zeit habe ich mit JCR (Java Content Repository) mehr und mehr. Ich liebe die Art und Weise, dass meine Module können einen einzelnen Datenspeicher teilen und dass ich die Struktur lassen und Eigenschaften entwickeln. Ich finde es viel einfacher, die Arbeit mit Knoten und Eigenschaften eher, dass die Abbildung meiner Objekte in einer Datenbank. Eine gute Umsetzung ist Hase .

Wie für den Frühling, es hat eine Menge Features Ich mag, aber die Menge an XML benötigte Mittel zum Konfigurieren ich werde es nie verwenden. Ich nutze stattdessen Guice und lieben es.

Um Roundup, würde ich Ihre Zweifel an Entwicklern zeigen, wie Hibernate wird ihr Leben einfacher machen. Wie für den Frühling würde ich ernsthaft prüfen, ob Guice eine brauchbare Alternative ist, und dann versuchen zu zeigen, wie Spring / Guice macht die Entwicklung besser und einfacher.

ich viel Frühling getan haben / Hibernate Entwicklung. Im Laufe der Zeit hat sich die Art, wie Menschen verwendet, um sowohl in Kombination ein wenig verändert. Der ursprüngliche HibernateTemplate Ansatz hat sich als schwierig erwiesen zu debuggen, da sie schluckt und hüllt ansonsten nützlichen Ausnahmen; sprechen Sie mit dem Hiberante API direkt!

Bitte halten Sie bei der generierten SQL-Suche (Ihre Entwicklung Protokollierung konfigurieren SQL zeigen). eine Abstraktionsschicht auf die Datenbank bedeutet nicht, denken Sie nicht mehr in SQL müssen; Sie werden nicht eine gute Leistung, wenn man anders.

Betrachten Sie das Projekt. Ich habe mehrmals iBatis über Hibernate gewählt, wo wir strenge Leistungsanforderungen hatten, komplexe Legacy-Schemata oder gut DBAs die Lage zu schreiben ausgezeichnete SQL.

Wie für Hibernate: ein sehr gutes Werkzeug für die Anwendung, die mit einer sich schnell ändernden Datenbankschema handelt, eine große Menge von Tabellen, tun viele einfache CRUD-Operationen. Berichte mit komplexen Abfragen beteiligt sind eher weniger gut behandelt. Aber in diesen Fällen ziehe ich es in JDBC oder native Abfragen zu mischen. Also, für eine kurze Antwort: Ich glaube Zeit für das Erlernen Hibernate ist eine gute Investition (sie sagen, dass es mit EJB3.0 und JPA-Standards kompatibel ist, auch, aber das hat nicht in die Gleichung kommen, wenn ich es für meine persönlichen bewertet Verwendung).

Wie für den Frühling ... finden Sie unter Das Bile Blog :)

Denken Sie daran: Gerüste sind nicht Silberkugeln , aber man sollte nicht das Rad neu erfinden entweder.

Ich finde es wirklich gut bekannte Frameworks wie Hibernate zu verwenden hilft, weil es Ihren Code in eine bestimmte Form passt, oder eine Art des Denkens. Bedeutung, da Sie Hibernate verwenden, schreiben Sie Code, um eine bestimmte Art und Weise, und die meisten, wenn nicht alle Entwickler, die Hibernate wissen Lage, Ihre Linie des Denkens ganz leicht zu folgen.

Es gibt einen Nachteil dieser, natürlich. Bevor Sie ein Hot Shot Hibernate-Entwickler werden, wirst du feststellen, dass Sie einen Platz in ein kreisförmiges Loch zu passen versuchen. Sie wissen, was Sie tun wollen, und wie du solltest es tun, bevor Hibernate ins Bild kam, aber das Finden der Hibernate Weg es nehmen tun kann ... ziemlich viel Zeit.

Still, für Unternehmen, die häufig Berater mieten (die eine Menge Quellcode in kürzester Zeit zu verstehen, müssen), oder wenn die Entwickler auf unterzeichnen und häufig verlassen, oder wo Sie wollen einfach nicht wetten, dass Ihre Entwickler bleiben für immer und nie den Job wechseln -. Hibernate und andere Standard-Frameworks eine ziemlich gute Idee, die ich denke,

/ Ace

Spring und Hibernate sind Rahmenbedingungen, die schwierig zu meistern sind. Es kann nicht eine gute Idee, sich mit engen Terminen in Projekten zu verwenden, während Sie noch die Rahmenbedingungen, um herauszufinden,.

Die Vorteile der Frameworks sind im Grunde genommen, um zu versuchen, eine Plattform zu bieten, damit für konsistente Codes Produkte. Aus Erfahrung würden werden Sie gut beraten Entwickler mit dem an Ort und Stelle Best Practices Einstellung Frameworks erlebt zu haben.

Je nach Ausführung der Anwendung und / oder Datenbank gibt es Macken auch, dass Sie umgehen müssen werden, um sicherzustellen, dass die Rahmenbedingungen behindern die Leistung nicht.

Meiner Meinung nach ist der größte Vorteil des Frühlings ist, dass es fördert und ermöglicht eine bessere Entwicklung Praktiken, insbesondere lose Kopplung, Testen und mehr Schnittstellen. Hibernate ohne Frühling kann wirklich schmerzhaft sein, aber die beiden zusammen sind sehr nützlich.

Nachrüsten ein vorhandenes Projekt zu jedem Rahmen schmerzhaft sein wird, aber der Refactoring Prozess hat oft schwerwiegende Vorteile für die langfristige Wartbarkeit.

Ich habe mit vielen Beiträge auf diesem zustimmen. Ich habe beide verwendet, umfangreich, in einer Vielzahl von Einstellungen. Wenn ich eine Design-Entscheidung rückgängig machen könnte, es wäre zu Hibernate verwendet hat. Wir veranschlagten tatsächlich Release in einem unserer Produkte Hibernate für iBatis und Spring-JDBC für eine Best-of-all-Welten Ansatz zu tauschen. Ich kann einen neuen Entwickler haben bekommen bis zu beschleunigen mit Spring-JDBC, Frühling-MVC, Frühling-Ioc und iBatis schneller, als wenn ich damit beauftragt sie nur mit Hibernate.

Hibernate ist einfach zu kompliziert für diese KISS Entwickler. Und der Himmel helfen Sie mit Hibernate, wenn Ihr DBA sieht die generierte SQL die Datenbank sieht und sendet Ihnen wieder mit optimierten Versionen.

Die Top-Antwort erwähnt, dass Hibernate ist schlecht dokumentiert. Ich bin damit einverstanden, dass das Online-Referenzhandbuch vollständiger sein könnte. ein Buch, geschrieben von Hibernate Autoren jedoch, ‚ Java Persistenz mit Hibernate ‘ ist ein Muss für jeder Hibernate Benutzer und sehr komplett.

@slim - Ich bin wieder mit Ihnen an diesem Morgen.

Es klingt wie ein klassischer Fall von Not Invented Here-Syndrom . Wenn sie auf Frühling nicht so scharf sind, sollten sie andere Möglichkeiten in Betracht ziehen, anstatt ihre eigenen Rahmen rollen (ob sie es acknowledge tun oder nicht). Guice kommt als Möglichkeit in den Sinn. Auch picocontainer. Es gibt andere, da draußen, je nachdem, was Sie benötigen.

Spring und Hibernate auf jeden Fall das Leben leichter machen. erst angefangen mit ihnen vielleicht ein wenig zeitaufwendig am Anfang sein, aber Sie werden später von ihr sicherlich profitieren. Nun wird die XML durch Anmerkungen ersetzt werden, brauchen Sie auch nicht Hunderte von Zeilen von XML zu geben.

Sie möchten AppFuse betrachten Sie Ihre Lernkurve zu reduzieren: erzeugen eine Anwendung, studieren und anpassen, und los geht es.

Frameworks sind nicht böse. auch das Java SDK ist ein Framework.

Was sie wahrscheinlich kämpfen Rahmen Proliferation . Sie sollten nicht einen Rahmen für ein Projekt nur für den Kick davon bringen, sollte es im Einklang Wert in einer angemessenen Zeit bringen. Jeder Rahmen erfordert eine Lernkurve, aber sollten Sie mit einer erhöhten Produktivität belohnen und bietet später.

Wenn Sie mit dem Code kämpfen, die aufgrund von inkonsistenter Datenbanknutzung, komplizierten Cache-Mechanismen oder einer Vielzahl von anderen Gründen schwer zu debuggen ist. Hibernate wird großer Wert hinzufügen. abgesehen von der Lernkurve (was für mich etwa 1 Monat der praktischen Arbeit hat) es keine Fallen waren, vorausgesetzt, Sie jemanden haben, um die Grundlagen für Sie zu erklären.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top