我有一个遗留数据库,它具有与主键和外键相同的属性。我正试图从Grails映射它但我遇到了问题。这是我的域类:
class AccommodationPrice {
Integer id
Accommodation accommodation
static mapping = {
table 'alojamiento_precios'
id generator: 'assigned', name: accommodation, type: 'integer'
accommodation column: 'id'
}
}
这是数据库表:
CREATE TABLE alojamiento_precios
(
id integer NOT NULL,
CONSTRAINT alojamientoprecios_pkey PRIMARY KEY (id),
CONSTRAINT "FK alojamiento" FOREIGN KEY (id)
REFERENCES alojamiento (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
我读了这个问题Grails: Foreign key as primary key?但它对我不起作用:当我使用复合键时,grails要求我 accommodation_id ,但我没有这个属性我的桌子,因为它是 id 。
答案 0 :(得分:0)
如果你想要的只是将一个属性映射为一个id,你可以这样做():
class AccommodationPrice {
String price
long accomodationId
static mapping = {
table 'alojamiento_precios'
id generator: 'assigned', name:'accomodationId'
version false
}
static transients = ['accomodation']
Accomodation getAccomodation() {
Accomodation.get(accomodationId)
}
void setAccomodation(Accomodation a) {
accomodationId = a?.id
}
}
您甚至不需要声明所需的类型,GORM会假定您的住宿主键类型。但是,在使用某些条件查询时可能会遇到问题。但是HQL很简单,工作正常。
这种策略被称为主键关联,您可以在here中找到关于它的良好讨论。
我希望它有所帮助!