gpt4 book ai didi

grails - Grails/Gorm:继承和外键

转载 作者:行者123 更新时间:2023-12-02 15:53:16 25 4
gpt4 key购买 nike

给定这样的域类:

class A {   // in reality this is a basic User class that is required in multiple projects
}

class B extends A { // in reality B is a "patient"-kind of user.
static hasMany = [c: C]
}

// c/d is stuff like "MedicationPrescription", so basically data only relevant to the patient. However the system needs to realize that Patients are Users, as the User base class is used for spring security logins and in general has a lot of the basic data a person just has. (Name, etc.)
class C {
static belongsTo = [b: B, a: A, d: D]
}

class D {
}

我收到此错误:
org.hibernate.MappingException: Foreign key (FK_pwu2w72ul5a5213husrv3onr3:c [])) must have same number of columns as the referenced primary key (a [id])
at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:110)
at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:93)
at org.hibernate.cfg.Configuration.secondPassCompileForeignKeys(Configuration.java:1818)
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1741)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1426)
at org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration.secondPassCompile(HibernateMappingContextConfiguration.java:287)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
at org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration.buildSessionFactory(HibernateMappingContextConfiguration.java:196)
at org.grails.orm.hibernate.HibernateMappingContextSessionFactoryBean.doBuildSessionFactory(HibernateMappingContextSessionFactoryBean.java:476)
at org.grails.orm.hibernate.HibernateMappingContextSessionFactoryBean.buildSessionFactory(HibernateMappingContextSessionFactoryBean.java:470)
at org.grails.orm.hibernate.HibernateMappingContextSessionFactoryBean.afterPropertiesSet(HibernateMappingContextSessionFactoryBean.java:93)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
... 41 common frames omitted

如果删除了A和B之间的继承关系,该错误就会消失,但是我的域中有这个星座。我不明白为什么Gorm会这样做,从错误消息看来,外键中的属性列表为空?

另外,我什至不能提及类A中的类B,C或D,因为类A是插件的一部分,而插件对此一无所知。

编辑:
我可能只是取消继承,而是像这样使用组合:
class B {
A a
static hasMany = [c: C]
}

至少在启动时并没有爆炸,但是仍然:为什么?

最佳答案

您可以像这样照顾域类的星座:

class User { }

class Patient extends User {
static hasMany = [prescriptions: MedicationPrescription, stuff: OtherStuff]
}

class MedicationPrescription {
static belongsTo = [patient: Patient]
}

class OtherStuff {
static belongsTo = [patient: Patient]
}

这将在 PatientMedicationPrescription之间以及 PatientOtherStuff之间创建双向一对多 association。注意,每个 belongsTo都有一个对应的 hasMany

正如您已经发现的那样,您也可以使用合成。

关于grails - Grails/Gorm:继承和外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36015680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com