grails - 复合键,Hibernate映射异常

时间:2012-04-24 01:53:54

标签: hibernate grails gorm composite-key

以下Domain类在启动时提供此映射异常:

  

创建名为'sessionFactory'的bean时出错:init方法的调用失败;嵌套 异常是   org.hibernate.MappingException:FOREIGNKEY   (FKA9FB5C607D60EAE9:person_examschedule [testingcenter_examschedule_id   dummy_table,testing_center_exam_schedule_testing_center_id,testing_center_exam_schedule_exam_schedule_id]))   必须具有与引用的主键相同的列数   (testingcenter_examschedule [testingcenter_id,examschedule_id])

class TestingCenterExamSchedule implements Serializable{

Long testingCenterId
ExamSchedule examSchedule
TestingCenter testingCenter   
int bufferedSlots

static transients = ['testingCenter']

static constraints = {
    examSchedule nullable: false
    testingCenter nullable: false
    testingCenterId nullable: false
    bufferedSlots nullable:false
}

static mapping = {
    table 'testingcenter_examschedule'
    version false
    id composite: ['testingCenterId','examSchedule']
    testingCenterId column: 'testingcenter_id'
    examSchedule column: 'examschedule_id'
    bufferedSlots column: 'buffered_slots'

}

这是我的另一个域类,它也有一个复合键

class RegistrantTestingCenterExamSchedule implements Serializable {

Registrant registrant
TestingCenterExamSchedule testingCenterExamSchedule

static constraints = {
    registrant nullable: false
    testingCenterExamSchedule nullable: false
}

static mapping = {
    table 'person_examschedule'
    version: false
    id composite: ['registrant', 'testingCenterExamSchedule']
    columns {
        registrant column: 'person_id'
        testingCenterExamSchedule column: ['testingcenter_examschedule_id', 'dummy_table']
    }
}

我很难解决这个问题,而且由于我现有的架构,我想做这项工作,谁能告诉我这是什么问题以及如何解决它?

感谢您分享您的知识。

2 个答案:

答案 0 :(得分:0)

在TestingCenterExamSchedule中,您已将testingCenter声明为瞬态属性,我想知道这是否会导致GORM映射问题?无论如何,您似乎不必要地映射列,即使您要映射到现有/遗留表模式,也应该自动创建许多已定义的列。

答案 1 :(得分:0)

我相信这是same issue I'm facing

Brass tacks:非常肯定这是GORM-Hibernate的错误,which I've logged here

解决方法是剥离关联映射并创建为您手动加载关联的getter和setter。对于所有用例,这都不一定足够。

¯\ _(ツ)_ /¯