2011-06-28 68 views
2

我有一個Grails項目,在src/groovy文件夾中使用Hibernate XML和域類。我正在從1.0.3升級到1.3.7。 Hibernate XML具有一些屬性的自定義列名稱,而域類使用這些屬性。然而,當我運行該應用程序會生成對性能的新列,如果他們沒有列屬性:Grails - 休眠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列。有任何想法嗎?

UPDATE:

即使我添加映射到域類,它仍然會創建新列:

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

回答

0

看起來您不能在Hibernate 3 XML for Grails中指定大寫字母。當我將映射更改爲:

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

它工作正常。當我將其更改爲小寫字母時,它可以正常工作,但引入大寫字母會使其與默認值一致。

1

您可以在域類本身,例如cusomize列名

class User { 
    String emailAddress 

    static mapping = { 
    emailAddress column: "emailAddress"   
    } 
} 
+0

我是否應該在兩個地方都做到這一點? – skaz

+0

即使這不起作用 - 它完全忽略了src/groovy文件夾中的映射。 – skaz

0

@skaz:我認爲你最好把你的域名類放到grails-app/domain文件夾中。文件夾src/groovy用於非持久性域類(不會保存在數據庫中),因此它不會得到grails映射的方式。這也是唐的方法不起作用的原因。

根據我的經驗,移植不會太難。之後,您可以刪除休眠配置並僅使用grails ORM映射(如Don指出的那樣)。

+0

長 - 當你使用Hibernate XML時,你不能將它們放在grails-app/domain文件夾中。另外,這與Don的方法爲什麼不起作用無關。我會發佈一個答案,爲什麼。 – skaz

+0

@skaz:對不明確的解釋抱歉,但我的建議是放棄Hibernate XML並獲得Grails的全力支持。當您使用Hibernate XML進行配置時,與其他Java Framework(Spring,Struts ...)一樣,您不會從Grails的支持中獲得太多優勢。 –

+0

@skaz:據我所知,如果該類位於grails-app/domain文件夾中,Don的方法不需要xml配置。但在src/groovy文件夾中,它不起作用。 –