Grails-HibernateXML-自定义列名
我有一个Grails项目,它在src/groovy文件夹中使用HibernateXML和域类。我正在从1.0.3升级到1.3.7。HibernateXML对某些属性具有自定义列名,而域类使用这些属性。但是,当我运行应用程序时,它会为属性生成新列,就像它们没有列属性一样:Grails-HibernateXML-自定义列名,hibernate,grails,Hibernate,Grails,我有一个Grails项目,它在src/groovy文件夹中使用HibernateXML和域类。我正在从1.0.3升级到1.3.7。HibernateXML对某些属性具有自定义列名,而域类使用这些属性。但是,当我运行应用程序时,它会为属性生成新列,就像它们没有列属性一样: <class name="User" table="x_users"> <cache usage="read-write"/> <comment>Use
<class name="User" table="x_users">
<cache usage="read-write"/>
<comment>User</comment>
...
<property name="emailAddress" column="emailAddress"/>
...
</class>
</hibernate-mapping>
用于用户的XML:
<class name="User" table="x_users">
<cache usage="read-write"/>
<comment>User</comment>
...
<property name="emailAddress" column="emailAddress"/>
...
</class>
</hibernate-mapping>
这将导致在运行应用程序时创建“电子邮件地址”列。有什么想法吗
<class name="User" table="x_users">
<cache usage="read-write"/>
<comment>User</comment>
...
<property name="emailAddress" column="emailAddress"/>
...
</class>
</hibernate-mapping>
更新:
<class name="User" table="x_users">
<cache usage="read-write"/>
<comment>User</comment>
...
<property name="emailAddress" column="emailAddress"/>
...
</class>
</hibernate-mapping>
即使我向域类添加映射,它仍然会创建新列:
<class name="User" table="x_users">
<cache usage="read-write"/>
<comment>User</comment>
...
<property name="emailAddress" column="emailAddress"/>
...
</class>
</hibernate-mapping>
class User {
static mapping = {
emailAddress column:'emailAddress'
}
}
您可以自定义域类本身中的列名,例如
<class name="User" table="x_users">
<cache usage="read-write"/>
<comment>User</comment>
...
<property name="emailAddress" column="emailAddress"/>
...
</class>
</hibernate-mapping>
class User {
String emailAddress
static mapping = {
emailAddress column: "emailAddress"
}
}
看起来您无法在Hibernate3XML中为Grails指定大写字母。当我将映射更改为:
<class name="User" table="x_users">
<cache usage="read-write"/>
<comment>User</comment>
...
<property name="emailAddress" column="emailAddress"/>
...
</class>
</hibernate-mapping>
<class name="User" table="x_users">
<cache usage="read-write"/>
<comment>User</comment>
...
<property name="emailAddress" column="test"/>
...
</class>
使用者
...
...
它工作正常。当我将其更改为小写时,它工作正常,但引入大写会使其与默认值一致。@skaz:我认为您最好将域类放入
grails app/domain
文件夹中。文件夹src/groovy
用于非持久性域类(不会保存在数据库中),因此它不会以grails映射方式。这也是Don的方法不起作用的原因
<class name="User" table="x_users">
<cache usage="read-write"/>
<comment>User</comment>
...
<property name="emailAddress" column="emailAddress"/>
...
</class>
</hibernate-mapping>
根据我的经验,移植不会太难。之后,您可以删除hibernate配置,只使用grails ORM映射(正如Don所指出的)。但我真的必须在这两个地方都这样做吗?即使这样做不起作用-它完全忽略了src/groovy folder.Long中的映射-当您使用hibernate XML时,您不能将它们放在grails app/domain文件夹中。此外,这与为什么Don的方法不起作用无关。我将发布一个关于原因的答案。@skaz:很抱歉没有明确的解释,但我的建议是放弃HibernateXML并接受Grails的完全支持。当您使用Hibernate XML进行配置时,与其他Java框架(Spring、Struts…)一样,您也不会从Grails的支持中获得太多优势。@skaz:据我所知,如果类位于Grails app/domain文件夹中,Don的方法在没有XML配置的情况下工作。但在src/groovy文件夹中,它将不起作用。
<class name="User" table="x_users">
<cache usage="read-write"/>
<comment>User</comment>
...
<property name="emailAddress" column="emailAddress"/>
...
</class>
</hibernate-mapping>