4

我正在尝试映射此类的列名:

class Amount{

    String total //Total amount of something
    String type  //Type of amount, Dollars, %, Times something
    Bonification bonificationRate  //the amount can be "x times another bonification"

    static belongsTo = [parentBonification: Bonification]

    static mapping = {
       table "AMOUNTS"
       total column: "AMOU_TTOTAL"
       type column: "AMOU_TTYPE"
       parentBonification column: "BONI_CID"
       bonificationRate column: "BONI_TRATE_CID"
    }

}


class Bonification {  
    //among other things:  
    Amount amount
}

问题是在数据库中没有创建具有类的字段Bonification,没有使用我给它们的名称,也没有使用默认的假定名称。

评论编辑:

  1. 两者都是域类;
  2. 数据源已开启dbCreate = "update"
  3. 我在 Oracle 中删除了表,让 Grails 再次创建它。仍然没有 Bonification 列。
  4. 我不能dbCreate = "create-drop",因为有我现在无法删除的数据。
  5. 我用dbCreate = create-drop. 仍然没有运气。

(PD:所有其他字段都被保留并使用正确的列名映射,只有这两个Bonification字段是问题)
还有其他方法吗?

Grails:1.3.9
BD:Oracle 9

编辑询问的 DataSource.groovy (从 Config.groovy 访问的外部文件 grails.config.locations = [ "file:${extConfig}/${appName}Config.groovy"]

package xx.xxx.xxxx.xxxXxxx

dataSource 
{
    pooled = true
    dialect = "org.hibernate.dialect.Oracle10gDialect"
    driverClassName = "oracle.jdbc.OracleDriver"    
    username = "XXX"
    password = "XXX" 
    properties {
                maxActive = 100
                maxIdle = 25
                minIdle = 5
                initialSize = 5
                minEvictableIdleTimeMillis = 60000
                timeBetweenEvictionRunsMillis = 60000
                maxWait = 10000
                validationQuery = "select 1 from dual"
                }

}
hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = true
    cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'
}

// environment specific settings
environments {
    development {
println "Including external DataSource"
        dataSource {            
            dbCreate = "update"
            url = "jdbc:oracle:thin:@xxx.xxx.xx:xxxx:XXXX"
        }
    }
}
4

1 回答 1

4

好的,我终于明白了。

我使用了“mappedBy”属性。

http://grails.org/doc/2.1.0/ref/Domain%20Classes/mappedBy.html

文档(6.2.1.2 One-to-many)说这是用于“hasMany”方面。这让我很困惑,因为我没有 hasMany 而是两个相同类型的字段Class Amount。而我真正需要做的是使用 mappedBy 属性,而不是在 Amount 类中,而是在只有一个引用的 Bonification 类中Amount

并且我告诉了Amount Class,至于 Bonification,他必须支持参考,这样“他”才不会感到困惑,并将该bonificationRate领域视为一个领域,而不是像我认为他之前所做的那样作为参考。

class Amount{

    String total //Total amount of something
    String type  //Type of amount, Dollars, %, Times something
    Bonification bonificationRate  //the amount can be "x times another bonification"

    static belongsTo = [parentBonification: Bonification]

    static mapping = {
       table "AMOUNTS"
       total column: "AMOU_TTOTAL"
       type column: "AMOU_TTYPE"
       parentBonification column: "BONI_CID"
       bonificationRate column: "BONI_TRATE_CID"
    }

}


class Bonification {  
    //among other things:  
    Amount amount

    static mappedBy = [amount: "parentBonification"]
}

那并没有创造出我需要的东西,parentBonification "BONI_CID" column但它确实创造了bonificationRate "BONI_TRATE_CID"我需要的东西。

对不起,如果它太乱了。无论如何,感谢您的时间和帮助。

于 2013-01-04T20:35:01.573 回答