Hibernate 外键(FK_)的列数必须与引用的主键的列数相同
我正在使用一个遗留数据库,其中表a由3个组合键组成,表B由2个组合键组成,这两个组合键与表a中的两个组合键相同 OnesolPeNamesHibernate 外键(FK_)的列数必须与引用的主键的列数相同,hibernate,grails,gorm,Hibernate,Grails,Gorm,我正在使用一个遗留数据库,其中表a由3个组合键组成,表B由2个组合键组成,这两个组合键与表a中的两个组合键相同 OnesolPeNames class OnesolPeNames implements Serializable { static mapping = { table "ONESOL_pe_names" id composite: ["division", "peid"] columns{ divi
class OnesolPeNames implements Serializable {
static mapping = {
table "ONESOL_pe_names"
id composite: ["division", "peid"]
columns{
division column: 'division', length: 8, sqlType: "char"
peid column: 'pe_id', length: 12, sqlType: "char"
peNameU column: 'pe_name_u', length: 50, sqlType: "char"
}
}
static hasMany = [ recoverySetups : RecoverySetup]
....
class RecoverySetup implements Serializable {
static mapping = {
table "recovery_setup"
id composite: ["division", "peid", "orgkey"]
columns {
division column: 'division', length: 10, sqlType: "char"
peid column: 'peid', length: 12, sqlType: "char"
orgkey column: 'org_key', length: 8, sqlType: "char"
oneSolName column: ['division', 'peid']
}
}
static belongsTo = [oneSolName: OnesolPeNames]
....
恢复设置
class OnesolPeNames implements Serializable {
static mapping = {
table "ONESOL_pe_names"
id composite: ["division", "peid"]
columns{
division column: 'division', length: 8, sqlType: "char"
peid column: 'pe_id', length: 12, sqlType: "char"
peNameU column: 'pe_name_u', length: 50, sqlType: "char"
}
}
static hasMany = [ recoverySetups : RecoverySetup]
....
class RecoverySetup implements Serializable {
static mapping = {
table "recovery_setup"
id composite: ["division", "peid", "orgkey"]
columns {
division column: 'division', length: 10, sqlType: "char"
peid column: 'peid', length: 12, sqlType: "char"
orgkey column: 'org_key', length: 8, sqlType: "char"
oneSolName column: ['division', 'peid']
}
}
static belongsTo = [oneSolName: OnesolPeNames]
....
我正试图像这样访问OnesolPeNames
recoverySetup.onesolPeNames.peNameU
我得到以下错误
由MappingException导致:外键
(FK_ib9w9pn893cwi1dkk84qs31bx:恢复设置[部门,
peid、onesol_pe_name_division、onesol_pe_name_peid])必须具有相同的名称
作为引用主键的列数(ONESOL\u pe\u名称
[部门,pe_id])
我正在将oneSolName列设置为['division','peid']
,其中onesol\u pe\u names\u division,onesol\u pe\u names\u peid
来自哪里
是否我的复合密钥是PK的一部分,但也扮演着FK的角色,即所谓的“派生身份” 我遇到了类似的问题,我用这种方式解决了映射表:
class RecoverySetup implements Serializable {
static mapping = {
table "recovery_setup"
id composite: ["division", "peid", "orgkey"]
columns {
orgkey column: 'org_key', length: 8, sqlType: "char"
oneSolName {
column name: 'division'
column name: 'peid'
}
}
oneSolName updateable: false, insertable: false
}
static belongsTo = [oneSolName: OnesolPeNames]
...
}
我有一个类似的问题,我用这种方式解决了映射表:
class RecoverySetup implements Serializable {
static mapping = {
table "recovery_setup"
id composite: ["division", "peid", "orgkey"]
columns {
orgkey column: 'org_key', length: 8, sqlType: "char"
oneSolName {
column name: 'division'
column name: 'peid'
}
}
oneSolName updateable: false, insertable: false
}
static belongsTo = [oneSolName: OnesolPeNames]
...
}
我有一个类似的问题,我用这种方式解决了映射表:
class RecoverySetup implements Serializable {
static mapping = {
table "recovery_setup"
id composite: ["division", "peid", "orgkey"]
columns {
orgkey column: 'org_key', length: 8, sqlType: "char"
oneSolName {
column name: 'division'
column name: 'peid'
}
}
oneSolName updateable: false, insertable: false
}
static belongsTo = [oneSolName: OnesolPeNames]
...
}
我有一个类似的问题,我用这种方式解决了映射表:
class RecoverySetup implements Serializable {
static mapping = {
table "recovery_setup"
id composite: ["division", "peid", "orgkey"]
columns {
orgkey column: 'org_key', length: 8, sqlType: "char"
oneSolName {
column name: 'division'
column name: 'peid'
}
}
oneSolName updateable: false, insertable: false
}
static belongsTo = [oneSolName: OnesolPeNames]
...
}
我发现您在映射遗留数据库时遇到问题。我有一个Grails应用程序,它映射一个遗留数据库,其中所有表都至少有两个组合键。不同之处在于,我没有使用DomainClass进行映射,我使用的是hbm.xml文件(Hibernate的传统方式)。同样的情况下,我的每个表都是两个或多个组合键。是否可以使用DomainClass进行此操作?如果可能的话,管理层会更喜欢这种方法。我现在不记得原因了,但我在使用DomainClass映射表时遇到了问题。当我决定使用hbm.xml文件进行映射时,一切都开始正常工作。为了生成hbm.xml文件,我使用了一个Eclipse插件HibernateTools。这个插件连接到一个遗留数据库(通过JDBC),并自动生成hbm.xml和与.java相关的。我想我的问题可能是派生标识。我发现您在映射遗留数据库时遇到了问题。我有一个Grails应用程序,它映射一个遗留数据库,其中所有表都至少有两个组合键。不同之处在于,我没有使用DomainClass进行映射,我使用的是hbm.xml文件(Hibernate的传统方式)。同样的情况下,我的每个表都是两个或多个组合键。是否可以使用DomainClass进行此操作?如果可能的话,管理层会更喜欢这种方法。我现在不记得原因了,但我在使用DomainClass映射表时遇到了问题。当我决定使用hbm.xml文件进行映射时,一切都开始正常工作。为了生成hbm.xml文件,我使用了一个Eclipse插件HibernateTools。这个插件连接到一个遗留数据库(通过JDBC),并自动生成hbm.xml和与.java相关的。我想我的问题可能是派生标识。我发现您在映射遗留数据库时遇到了问题。我有一个Grails应用程序,它映射一个遗留数据库,其中所有表都至少有两个组合键。不同之处在于,我没有使用DomainClass进行映射,我使用的是hbm.xml文件(Hibernate的传统方式)。同样的情况下,我的每个表都是两个或多个组合键。是否可以使用DomainClass进行此操作?如果可能的话,管理层会更喜欢这种方法。我现在不记得原因了,但我在使用DomainClass映射表时遇到了问题。当我决定使用hbm.xml文件进行映射时,一切都开始正常工作。为了生成hbm.xml文件,我使用了一个Eclipse插件HibernateTools。这个插件连接到一个遗留数据库(通过JDBC),并自动生成hbm.xml和与.java相关的。我想我的问题可能是派生标识。我发现您在映射遗留数据库时遇到了问题。我有一个Grails应用程序,它映射一个遗留数据库,其中所有表都至少有两个组合键。不同之处在于,我没有使用DomainClass进行映射,我使用的是hbm.xml文件(Hibernate的传统方式)。同样的情况下,我的每个表都是两个或多个组合键。是否可以使用DomainClass进行此操作?如果可能的话,管理层会更喜欢这种方法。我现在不记得原因了,但我在使用DomainClass映射表时遇到了问题。当我决定使用hbm.xml文件进行映射时,一切都开始正常工作。为了生成hbm.xml文件,我使用了一个Eclipse插件HibernateTools。这个插件连接到一个遗留数据库(通过JDBC),并自动生成hbm.xml和与.java相关的。我想我的问题可能是派生标识工作得很好,当我们说oneSolName不可更新或不可插入时,这意味着什么?这是否意味着我无法更新该表中的任何记录?您可以根据需要在OnesolPeNames类中插入/更新记录。但是,当您在RecoverySetup类中设置oneSolName值时,您将执行设置/更新主键的操作。当我们说oneSolName不可更新或不可插入时,这意味着什么?这是否意味着我无法更新该表中的任何记录?您可以根据需要在OnesolPeNames类中插入/更新记录。但是,当您在RecoverySetup类中设置oneSolName值时,您将执行设置/更新主键的操作。当我们说oneSolName不可更新或不可插入时,这意味着什么?这是否意味着我无法更新该表中的任何记录?您可以根据需要在OnesolPeNames类中插入/更新记录。但是,当您在RecoverySetup类中设置oneSolName值时,您将执行设置/更新主键的操作。当我们说oneSolName不可更新或不可插入时,这意味着什么?这是否意味着我无法升级