【问题标题】:Grails - Hibernate XML - Custom Column NamesGrails - Hibernate XML - 自定义列名
【发布时间】:2011-06-28 15:44:44
【问题描述】:

我有一个 Grails 项目,它使用 Hibernate XML 和 src/groovy 文件夹中的域类。我正在从 1.0.3 升级到 1.3.7。 Hibernate XML 有一些属性的自定义列名,并且域类使用这些属性。但是,当我运行应用程序时,它会为属性生成新列,就好像它们没有列属性一样:

用户的 XML:

    <class name="User" table="x_users">
        <cache usage="read-write"/>
        <comment>User</comment>
...
<property name="emailAddress" column="emailAddress"/>
...
</class>

</hibernate-mapping>

用户的域(在 src/groovy 中):

package com.x.domain

class User {
...
  String emailAddress
...
}

这会导致在运行应用程序时创建列 email_address。有什么想法吗?

更新:

即使我将映射添加到域类,它仍然会创建新列:

class User {
    static mapping = {
        emailAddress column:'emailAddress'
        }
}

【问题讨论】:

    标签: hibernate grails


    【解决方案1】:

    您可以在域类本身中自定义列名,例如

    class User {
      String emailAddress
    
      static mapping = {
        emailAddress column: "emailAddress"        
      }
    }
    

    【讨论】:

    • 我真的应该在这两个地方都这样做吗?
    • 即使这不起作用 - 它完全忽略了 src/groovy 文件夹中的映射。
    【解决方案2】:

    您似乎无法在 Hibernate 3 XML 中为 Grails 指定大写字母。当我将映射更改为:

     <class name="User" table="x_users">
            <cache usage="read-write"/>
            <comment>User</comment>
    ...
    <property name="emailAddress" column="test"/>
    ...
    </class>
    

    它工作正常。当我将其更改为任何小写字母时,它可以正常工作,但引入大写字母会导致它使用默认值。

    【讨论】:

      【解决方案3】:

      @skaz:我认为你最好把你的域类放到grails-app/domain 文件夹中。文件夹src/groovy 用于非持久域类(不会保存在数据库中),因此不会获得grails映射方式。这也是唐的方法行不通的原因。

      根据我的经验,移植不会太难。之后,您可以删除休眠配置并仅使用 grails ORM 映射(正如 Don 指出的那样)。

      【讨论】:

      • Long - 使用 Hibernate XML 时,不能将它们放在 grails-app/domain 文件夹中。此外,这与为什么 Don 的方法不起作用无关。我将发布一个关于原因的答案。
      • @skaz:很抱歉解释不清楚,但我的建议是放弃 Hibernate XML 并完全支持 Grails。当您使用 Hibernate XML 进行配置时,与其他 Java 框架(Spring、Struts...)相同,您不会从 Grails 的支持中获得太多优势。
      • @skaz:据我所知,如果类位于 grails-app/domain 文件夹中,Don 的方法无需 xml 配置即可工作。但在 src/groovy 文件夹中,它不会工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      相关资源
      最近更新 更多