Database 如何在Grails中将外键映射为主键?
我有一个与主键和外键具有相同属性的遗留数据库。我试图从Grails映射它,但我有问题。这是我的域类:Database 如何在Grails中将外键映射为主键?,database,grails,mapping,gorm,legacy,Database,Grails,Mapping,Gorm,Legacy,我有一个与主键和外键具有相同属性的遗留数据库。我试图从Grails映射它,但我有问题。这是我的域类: class AccommodationPrice { Integer id Accommodation accommodation static mapping = { table 'alojamiento_precios' id generator: 'assigned', name: accommodation, type: 'i
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要求我输入id,但我的表中没有这个属性,因为它是id。如果您只想将属性映射为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很简单,工作正常
这种策略称为主键关联,您可以在中的gorm上找到关于它的良好讨论
我希望有帮助 等等。您想将住宿id用作住宿价格的id,还是想要id/住宿id的复合密钥?我想将住宿id用作住宿价格的id。谢谢您的提示,但这不是我真正想要做的。我想在住宿价格中使用外键住宿id作为主键。我尝试使用不同的选项来执行您提到的操作,包括名称:、名称:、列:、列:,但都不起作用。确定。我发现了一些有用的东西。编辑了我的答案。过来看。