Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Hibernate Oracle Tablespace-Anmerkung

Nein, out-of-the-box gibt es keine Möglichkeit. Ich habe es in der Vergangenheit mit dem folgenden - ziemlich umständlichen - Ansatz umgangen:

  1. Erstellen Sie Ihre eigene Anmerkung, @TableSpec die Tablespace und andere notwendige Attribute hat.
  2. Erweitern Sie org.hibernate.cfg.Configuration und getTableMappings() überschreiben um dekorierten Table zurückzugeben Objekte (siehe unten).
  3. Erweitern Sie org.hibernate.mapping.Table und sqlCreateString() überschreiben und / oder sqlAlterStrings() um die Tablespace-Spezifikation (und zusätzliche Einstellungen, falls vorhanden) anzuhängen.
  4. Anstatt das hbm2ddl-Tool (oder eine Ameisenaufgabe) zu verwenden, schreiben Sie Ihr eigenes, das Ihre Configuration erstellt Objekt, verarbeiten Sie alle Ihre Klassendateien, indem Sie Ihre @TableSpec sammeln und interpretieren Anmerkungen und rufen Sie Configuration.generateSchemaCreationScript() auf oder generateSchemaUpdateScript() um die eigentliche DDL zu generieren.

Wie gesagt, ziemlich kompliziert :-) Wenn ALLE Ihre zugeordneten Tabellen denselben Tablespace verwenden, können Sie alternativ den von Ihnen verwendeten Oracle-Dialekt erweitern und getTableTypeString() überschreiben um Ihre Tablespace-Spezifikation zurückzugeben. Obwohl dies ein hässlicher Hack ist (weil der ursprüngliche Zweck von tableTypeString darin besteht, den MySQL-Engine-Typ bereitzustellen), funktioniert er und ist sicherlich viel schneller und einfacher als der obige Ansatz.