且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Grails:映射同一类型的字段和belongsTo的列名称

更新时间:2023-11-28 22:16:28

好吧,最后我明白了。

mappedBy属性。

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



文档( 6.2.1.2一对多)表示这是用于hasMany 一面。这使我困惑,因为我没有一个hasMany,而是两个 Class Amount 类型的字段。
我真正必须做的是使用mappedBy属性,而不是在Amount类中,而是在Bonification类中只有一个对 Amount 的引用。

然后,我告诉金额类,至于Bonification,他必须反引用,所以he不会不会感到困惑,并且将 bonificationRate 字段视为字段,而不是我之前所做的参考。

  class金额{

字符串总数//总金额
字符串类型//金额类型,美元,%,Times东西
Bonification bonificationRate //数量可以是x倍另一个优化

static belongsTo = [parentBonification:Bonification]

static mapping = {
表AMOUNTS
总列:AMOU_TTOTAL
类型列:AMOU_TTYPE
parentBonification列:BONI_CID
bonificationRate列:BONI_TRATE_CID
}

}


类别Bonification {
//其中包括:
金额金额

static mappedBy = [金额: parentBonification]
}

没有创建 parentBonificationBONI_CID列但它创建了 bonificationRateBONI_TRATE_CID,我需要它。



对不起,太乱了。感谢您的时间和帮助。


I'm trying to map the column names of this class:

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
}

The thing is none of the field with the Bonification class are created in the DB, not with the name I give them and neither with the default suppossed names.

Comment Edit:

  1. Both are Domain Classes;
  2. Datasource is on dbCreate = "update"
  3. I dropped the Table in Oracle and let Grails create it again. Still no Bonification columns.
  4. I can not dbCreate = "create-drop" because there is data that I can't delete for now.
  5. I mounted a new local Derby Database with dbCreate = create-drop. Still no luck.

(PD: All other fields are persisted and mapped with the right column names, only those two Bonification fields are the problem)
Is there another way of doing this?

Grails: 1.3.9
BD: Oracle 9

Edit for asked DataSource.groovy (External file accessed from 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"
        }
    }
}

Ok, finally I got it.

I used the "mappedBy" property.

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

The documentation (6.2.1.2 One-to-many) said that is for use in the "hasMany" side. That confused me because I didn't have a hasMany but rather two field of the same type in Class Amount. And what I really had to do was to use the mappedBy property, not in the Amount Class, but in the Bonification Class that has just one reference to Amount.

And with that I tell to the Amount Class, wich Bonification he has to back reference so "he" doesn't get confused, and take the bonificationRate field just as a field and not as a reference as I think he was doing before.

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"]
}

That didn't created the parentBonification "BONI_CID" column but it Did created the bonificationRate "BONI_TRATE_CID" wich I needed.

Sorry if it's too messy. Thanks for the time and help anyway.