我有一个我用maven构建的项目,我需要使用hibernate3-maven-plugin中的hbm2ddl工具生成一个模式。
我需要使用一个名为 Order 的表创建数据库,就像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>
非常感谢任何提示或帮助。
谢谢!
答案 0 :(得分:4)
AFAIK,hbm2ddl.keywords
是一个NHibernate功能,Hibernate不支持。
使用Hibernate,你必须自己引用这个名字:
@Entity
@Table(name="`Order`")
public class Order {
...
}
文件的相关部分是:
5.4. SQL quoted identifiers
你可以强制Hibernate引用一个 生成的SQL中的标识符 将表或列名括在中 映射文档中的反引号。 Hibernate会使用正确的 SQL方言的引用样式。 这通常是双引号,但是 SQL Server使用括号和MySQL 使用反引号。
<class name="LineItem" table="`Line Item`"> <id name="id" column="`Item Id`"/><generator class="assigned"/></id> <property name="itemNumber" column="`Item #`"/> ... </class>
答案 1 :(得分:0)
可以在此处找到问题的另一种解决方案:https://forum.hibernate.org/viewtopic.php?p=2409922
基本上,它需要的是派生一个响应提供表名/列名的类。
希望有所帮助。
干杯, 张庭