Frage

Ich habe ein Projekt, das ich mit Maven baue, und ich muss ein Schema mit dem HBM2DDL-Tool von Hibernate3-Maven-Plugin generieren.

Ich muss eine Datenbank mit einer Tabelle namens erstellen Befehl Wie das SQL -Schlüsselwort und ich weiß nicht, wie man Maven dazu bringt, diese Tabelle zu zitieren, wenn sie das Skript generiert. Ich habe eine Suche durchgeführt und habe festgestellt, dass es eine Eigenschaft in Hibernate gibt, um das HBM2DDL -Tool zu sagen, aber ich kann dem Plugin nicht sagen, dass er es verwenden soll:

<property name="hbm2ddl.keywords">auto-quote</property>

Wenn ich die Tabelle nicht zitiere, generiert HBM2DDL ein Skript:

create table Order (orderId varchar(36) not null, orderCode integer, customer varchar(36) not null, supplier varchar(36) not null, product varchar(36) not null, forecast float, dateRaised date not null, dateDispatched date, dateReceived date, quantityOrdered double precision not null, quantitySent double precision, primary key (orderId)) ENGINE=InnoDB;

Das kompiliert nicht (aufgrund eines offensichtlichen Syntaxfehlers):

02:51:41,264 ERROR org.hibernate.tool.hbm2ddl.SchemaExport - Unsuccessful: create table Order (orderId varchar(36) not null, orderCode integer, customer varchar(36) not null, supplier varchar(36) not null, product varchar(36) not null, forecast float, dateRaised date not null, dateDispatched date, dateReceived date, quantityOrdered double precision not null, quantitySent double precision, primary key (orderId)) ENGINE=InnoDB
02:51:41,264 ERROR org.hibernate.tool.hbm2ddl.SchemaExport - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Order (orderId varchar(36) not null, orderCode integer, customer varchar(36) not' at line 1

Dies ist der Teil der Datei pom.xml:

<configuration>
 <components>
  <component>
   <name>hbm2java</name>
   <implementation>annotationconfiguration</implementation>
   <outputDirectory>src/main/java</outputDirectory>
  </component>
  <component>
   <name>hbm2ddl</name>
   <implementation>annotationconfiguration</implementation>
   <outputDirectory>src/main/resources</outputDirectory>
  </component>
  <component>
   <name>hbm2doc</name>
   <implementation>annotationconfiguration</implementation>
   <outputDirectory>docs/html/hibernate</outputDirectory>
  </component>
 </components>
 <componentProperties>
  <create>true</create>
  <drop>true</drop>
  <configurationfile>src/main/resources/hibernate.cfg.xml</configurationfile>
  <propertyfile>src/main/resources/database.properties</propertyfile>
  <jdk5>true</jdk5>
  <outputfilename>amasbe_db.sql</outputfilename>
 </componentProperties>
</configuration>

Alle Tipps oder Hilfe werden sehr geschätzt.

Vielen Dank!

War es hilfreich?

Lösung

Afaik, die hbm2ddl.keywords ist eine Nhibernate -Funktion und wird von Hibernate nicht unterstützt.

Mit Hibernate müssen Sie den Namen selbst zitieren:

@Entity
@Table(name="`Order`")
public class Order {
    ...
}

Der entsprechende Abschnitt der Dokumentation ist:

5.4. SQL zitierte Kennungen

Sie können Hibernate zwingen, eine Kennung im generierten SQL zu zitieren, indem Sie den Tabellen- oder Spaltennamen in Backticks im Mapping -Dokument einschließen. Hibernate verwendet den richtigen Anführungsstil für den SQL -Dialekt. Dies sind normalerweise doppelte Zitate, aber der SQL -Server verwendet Klammern und MySQL verwendet Backticks.

<class name="LineItem" table="`Line Item`">
    <id name="id" column="`Item Id`"/><generator class="assigned"/></id>
    <property name="itemNumber" column="`Item #`"/>
    ...
</class>

Verweise

Andere Tipps

Eine weitere Lösung für das Problem finden Sie hier: https://forum.hibernate.org/viewtopic.php?p=2409922

Grundsätzlich muss nur eine Klasse abgeleitet werden, die auf den Namen des Tabellennamens/Spaltennamens beantwortet wird.

Hoffe es hilft.

Prost, Truong

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