2010-04-23 4 views
10

Ich bin daran interessiert, wie hibernate.hbm2ddl.auto = Validierung tatsächlich funktioniert und ich habe Schwierigkeiten umfassende Dokumentation zu finden.Hibernate - hibernate.hbm2ddl.auto = validieren

Wir haben vor kurzem Produktionssystem entdeckt wurde von http://opensource.atlassian.com/projects/hibernate/browse/HHH-3532 betroffen (Hibernate entspricht Fremdschlüssel auf Namen, anstatt Unterschrift und so wird sie für Sie neu) und hibernate.hbm2ddl.auto = update unserer nächsten Version entfernt wird.

Ich würde sehr zufrieden sein, nur loswerden hibernate.hbm2ddl.auto zusammen zu bekommen und unsere Datenbank selbst verwalten. Allerdings teilen nicht alle meine Kollegen diese Weltansicht, und einige möchten sie in hibernate.hbm2ddl.auto = validate hinzufügen.

Ich bin besorgt dies das gleiche Problem getroffen werden, und ich bin interessiert weitere Dokumentation über die Suche nach, wie diese Validierung tatsächlich funktioniert. Die Hibernate Community Documentation (http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html) bezieht sich nur auf die Werte.

Hat jemand eine gute Dokumentation Zeiger oder eine wirkliche Lebenserfahrung in einem Produktionssystem bestätigen Sie mit?

Antwort

17

Ich bin besorgt, dass dies das gleiche Problem treffen wird und ich bin daran interessiert, mehr Dokumentation darüber zu finden, wie diese Validierung tatsächlich funktioniert.

Meiner Meinung nach ist die beste Dokumentation der Quellcode, die Sie überprüfen können, um zu sehen, was genau passiert ist. Die relevante Methode ist org.hibernate.tool.hbm2ddl.SchemaValidator#validate().

Ich ging schnell durch den Code und ich glaube nicht, dass die SchemaValidator Fremdschlüssel in der Datenbank überprüft: es überprüft das Vorhandensein von Tabellen, Spalten, id-Generatoren aber keine Fremdschlüssel. Ein Test gegen eine Haustier-Datenbank scheint dieses Verhalten zu bestätigen: Das Fallenlassen einer FK-Bedingung bricht die Schema-Validierung nicht (mit anderen Worten, der Validator prüft, ob die Anwendung ausgeführt werden kann, nicht für referentielle Integrität).

Nun HHH-3532 markiert werden als feste, warum Sie auf eine neuere Version von Hibernate oder nicht aktualisieren, wenn die Version von Hibernate Wechsel zu schwer ist, warum Sie nicht gelten den Patch für HHH-3532 selbst?

Nachdem das alle gesagt haben, ich nicht hibernate.hbm2ddl.auto=update verwenden, um Produktionsdatenbanken zu aktualisieren, verwende ich Änderungsskripte. Aber I Verwenden Sie hibernate.hbm2ddl.auto=validate und ich bin glücklich damit.

+0

Danke Pascal. Ich bin nicht verantwortlich für Produktionssysteme und, tbh, ich bin nicht davon überzeugt, dass fast genug Regressionstests passieren würden, um mich über veränderte Versionen glücklich zu machen! Blick durch das Steueränderungshistorie neulich ich, dass es ursprünglich als Validieren und jemand eingestellt bemerkt wurde, hatte es auf ‚udpate‘ aktualisiert. Angesichts dessen denke ich, dass es sicherer ist, es zu entfernen - hoffentlich ist es weniger wahrscheinlich, dass jemand eine ganze Zeile hinzufügt, als in Zukunft einen Wert zu verändern! – azp74