Как я могу процитировать таблицы с помощью hibernate3-maven-plugin hbm2ddl? - PullRequest
2 голосов
/ 01 октября 2010

У меня есть проект, который я строю с помощью maven, и мне нужно сгенерировать схему с помощью инструмента hbm2ddl из hibernate3-maven-plugin.

Мне нужно создать базу данных с таблицей с именем Порядок , как ключевое слово SQL, и я не знаю, как заставить maven цитировать эту таблицу при генерации сценария. Я выполнил поиск и обнаружил, что в hibernate есть свойство сообщать об этом инструменту hbm2ddl, но я не могу сказать плагину использовать его:

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

Если я не цитирую таблицу, hbm2ddl генерирует скрипт:

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 - 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

Это часть файла 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>

Любые советы или помощь действительно приветствуются.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 01 октября 2010

AFAIK, hbm2ddl.keywords является функцией NHibernate и не поддерживается Hibernate.

В Hibernate вам придется самим цитировать имя:

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

Соответствующий раздел документации:

5,4. SQL-идентификаторы в кавычках

Вы можете заставить Hibernate цитировать идентификатор в сгенерированном SQL по заключая имя таблицы или столбца в кавычки в документе сопоставления. Hibernate будет использовать правильный стиль цитаты для диалекта SQL. Обычно это двойные кавычки, но SQL Server использует скобки и MySQL использует backticks.

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

Ссылки

0 голосов
/ 24 сентября 2011

Другое решение проблемы можно найти здесь: https://forum.hibernate.org/viewtopic.php?p=2409922

По сути, все, что ему нужно, это получить класс, который отвечает за предоставление имени таблицы / имени столбца.

Надеюсь, что это поможет.

Ура, Труонг

...