Grails覆盖嵌入式属性映射

Grails覆盖嵌入式属性映射,grails,jpa,gorm,Grails,Jpa,Gorm,使用遗留现有数据库时,我们应该能够覆盖此类用例的嵌入式对象映射: 我想在我的数据库中添加一个客户,该客户在数据库中有两部电话: cu_phone 1和cu_phone 2。 给定以下电话对象: class Phone { String number [...] } 客户: class Customer { Phone phone1 Phone phone2 } 实际上,我们无法将此模型映射到gorm,因为Customer类无法覆盖phone number映射,以便pho

使用遗留现有数据库时,我们应该能够覆盖此类用例的嵌入式对象映射: 我想在我的数据库中添加一个客户,该客户在数据库中有两部电话: cu_phone 1和cu_phone 2。 给定以下电话对象:

class Phone
{ String number [...] }
客户:

class Customer { 
    Phone phone1 
    Phone phone2 
}
实际上,我们无法将此模型映射到gorm,因为Customer类无法覆盖phone number映射,以便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

在grails和gorm中使用此功能将非常好。

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

static mapping = { column = "cu_phone1" }
将属性映射到列。这就是你想要的还是我误解了这个问题


我想您应该这样映射:

class Customer { 
    Phone phone1 
    Phone phone2 

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

如果手机有两个属性

class Phone
{ String number 
  String type
[...] } 
并且您希望列名为:

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

这是一个问题,不是答案。请写下在你描述的情况下你会怎么做。