2016-10-04 9 views
0

Ich möchte eine neue Spalte zu MySQL-Tabelle mit JPA hinzufügen. Wie kann ich es erreichen?Neue Spalte zu MySQL hinzufügen über JPA

Mein Anliegen ist, obwohl die Tabelle aktualisiert werden kann, wie kann ich die Entität aktualisieren, so dass die Spalte für die Abfrage mithilfe von JPA verwendbar ist? oder gibt es eine andere lösung?

+0

Ich denke, die einfachste Lösung könnte sein, einen Weg zu finden, den Benutzer das Datenbankschema ändern zu müssen. Können Sie uns auf die Geschäftslogik hinweisen? –

+0

Da der Benutzer (Client) nicht in der Lage ist, direkt mit dem Datenbankschema zu kommunizieren, möchte ich diese Möglichkeit implementieren, um die Datenbank auf Clientseite zu aktualisieren ... – helloworld1234

+0

Das beantwortet meine Frage nicht wirklich. _Warum_ sollte der Client jemals das Datenbankschema ändern dürfen? Wenn zum Beispiel das Hinzufügen einer neuen Spalte zulässig ist, wie schützt man sich vor böswilligen Angriffen? Sie müssen sich jetzt Sorgen machen, dass unberechtigte Benutzer hereinkommen und die Tabelle explodieren, indem Sie Tausende von Spalten erstellen. –

Antwort

0

JPA bietet keine "on-the-fly" -Schemaaktualisierungen (und sicherlich nicht für dynamische Aktualisierungen von Entitätsklassen).

Einige Anbieter erlauben das Hinzufügen von Spalten beim Erstellen der EMF (z. B. DataNucleus JPA), wenn die Entitätsklasse erneut geladen werden kann. Das ist alles was es gibt. Anders als das, re-architect Ihre Anwendung

+0

Hmm ... hab es verstanden, vielleicht re-architect ist nur der Weg. Vielen Dank. – helloworld1234

1

Es gibt mehrere Möglichkeiten, es zu tun, meist durch Eigenschaften in persistence.xml. Ein Standardweg wäre die Verwendung von javax.persistence.schema-generation.scripts.create-script-source, die möglicherweise bei jedem Start der Webanwendung ausgeführt wird, was höchstwahrscheinlich zu Ausnahmen beim Start und möglicherweise zur Zerstörung Ihrer Daten führt.

In Hibernate können Sie Ihre Tabellen gemäß Ihren Entitäten aktualisieren, indem Sie hibernate.hbm2ddl.auto bis update verwenden.

http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#configurations-hbmddl

In Eclipse gibt es die eclipselink.ddl-generation Eigenschaft. Die create-or-extend-tables Einstellungen scheint angemessen.

http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/p_ddl_generation.htm

jedoch allgemein gesprochen, JPA mit Ihrem Schema zu halten ist weniger zuverlässig als auch manuell mit einem vorher geschriebenen Skript zum Zeitpunkt der Aktualisierung des Produktionsservers Webapp zu aktualisieren.

Verwandte Themen