我想做一些不好的事情,我不确定我是否可以说服Grails让我。我有一个存储历史学生数据的遗留表,如:
UserId | TermCode | Status | Other data
-------+----------+--------+-----------
1 | 2017 | A | etc
1 | 2016 | S | etc
1 | 2015 | A | etc
2 | 2017 | A | etc
...
主键是复合键,由userId和term组成。我真正喜欢的是有两个类,比如:
class Student {
Long userId
static hasMany = [studentTerms: StudentTerm]
static mapping = {
table name: 'student'
id name: 'userId' generator: 'assigned'
}
}
class StudentTerm {
Long userId
String termCode
String status
...
static hasOne = [student: Student]
static mapping = {
table name: 'student'
id composite: ['userId', 'termCode']
}
}
这样我就可以拥有另一个带有“student”属性的课程,让该课程可以访问整个历史
当我尝试这样做(并在其他类的关联中使用这些类)时,Grails抱怨主键的元素数量错误。我不喜欢我定义两个不同的类以两种不同的方式使用同一个表。我想如果我能在学生桌上创建一个可以解决问题的视图,但不幸的是,这不是一个选择。
有没有办法禁用任何检查告诉Grails / Hibernate当我创建一个与Student的关联时,它应该检查StudentTerm的定义?或者这远远超出了GORM认为合理的数据库结构的范围?