Grails覆盖嵌入式属性映射

时间:2013-12-19 14:07:17

标签: grails jpa gorm

使用旧的现有数据库时,我们应该能够覆盖这种用例的嵌入对象映射: 我想在我的数据库中添加一个客户,这个客户在DB中有2个电话: cu_phone1和cu_phone2。 给出以下电话对象:

class Phone
{ String number [...] }

客户:

class Customer { 
    Phone phone1 
    Phone phone2 
}

实际上,我们无法使用gorm映射此模型,因为Customer类无法覆盖电话号码映射,因此phone1.number映射到db中的cu_phone1,而phone2.number映射到db中的cu_phone2。

使用JPA,有一个注释允许这样做:

@AttributeOverride(name="number", column=@Column(name="cu_phone1")
Phone phone1
@AttributeOverride(name="number", column=@Column(name="cu_phone2")
Phone phone2

将这个功能放在带有gorm的grails中会很棒。

3 个答案:

答案 0 :(得分:1)

我想你会像这样映射:

class Customer { 
    Phone phone1 
    Phone phone2 

    static mapping = {
        columns {
            phone1 column: 'cu_phone1'
            phone2 column: 'cu_phone2'
        }
    }
}

答案 1 :(得分:0)

您应该能够使用映射来指定列名,如下所示:

static mapping = { column = "cu_phone1" }

将属性映射到列。这是你想要的,还是我误解了这个问题?

Grails docs

答案 2 :(得分:0)

如果手机有两个属性?

class Phone
{ String number 
  String type
[...] } 

你想要列名:

  phone1.number : 'cust_number1'
  phone1.type : 'cust_type1'
  phone2.number : 'cust_number2'
  phone2.type : 'cust_type2'