Grails / GORM:具有相同基础表的两个域类

时间:2017-12-20 15:54:55

标签: hibernate grails gorm

我想做一些不好的事情,我不确定我是否可以说服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认为合理的数据库结构的范围?

0 个答案:

没有答案