【问题标题】:Grails How to Correctly Map One-to-Many with a SQL Server databaseGrails 如何使用 SQL Server 数据库正确映射一对多
【发布时间】:2018-03-26 18:29:51
【问题描述】:

我有两个域类,它们之间的关系是 1 到 Many。我知道如何将每个类的列分别映射到它们各自的表,但是如何映射我的 MSSQL 数据库中存在的关系?没有连接表,我只有只读访问权限。我查看了 Grails 文档的各个页面,这就是我目前所处的位置(一个学生有很多课程)。在我的表中,将两个表联系在一起的外键位于 Courses 表中。

class StudentHeader { //on the one side
    String stuNo
    String stuName
    String stuStreet

    static mappedBy = [refs: "fkCustNo"]

    static hasMany = [refs: CourseHeader]
    static constraints = {
    }

    static mapping = {
        table name: "[tbl_Students]", schema: "[dbo]", catalog: "[CRD].[CourseTrak]"
        version false
        id generator: 'assigned', name: 'stuNo'
        stuNo column: '[PK_StudentNo]'
        stuName column: '[Student_Name]'
        stuStreet column: '[Student_Street]'


    }
}

class CourseHeader { //on the many side
    String courId
    String courName
    StudentHeader fkCourNo
    static constraints = {
    }

    static mapping = {
        table name: "[tbl_Courses]", schema: "[dbo]", catalog: "[CRD].[CourseTrak]"
        version false
        id generator: 'assigned', name: 'courId'
        courId column: '[PK_CourseId]'
        courName column: '[Course_Name]'
        fkCourNo column: '[FK_CourseNo]'


    }
}

这里的测试是我尝试访问学生课程的方式

StudentHeader.first().refs

【问题讨论】:

  • 你能分享一个关于你期望结果的例子吗?
  • 第8行不应该是“static hasMany = [refs: CourseHeader]”吗?
  • @Kloker 你是对的。编辑代码
  • 逆向工程插件可能是一个起点。 grails-plugins.github.io/grails-db-reverse-engineer

标签: grails mapping grails-orm one-to-many hibernate-mapping


【解决方案1】:

我相信我已经弄清楚了。对于多方面的域类,您需要像这样将 insert 和 updateable 设置为 false (“many”域中的对象字段必须与 mappedBy 中的键值对具有相同的值):

class StudentHeader{
static mappedBy = [refs: "fkCustNo"]
}

class CourseHeader { //on the many side
    String courId
    String courName
    StudentHeader fkCustNo
    static constraints = {
    }

    static mapping = {
        table name: "[tbl_Courses]", schema: "[dbo]", catalog: "[CRD].[CourseTrak]"
        version false
        id generator: 'assigned', name: 'courId'
        courId column: '[PK_CourseId]'
        courName column: '[Course_Name]'
        fkCustNo column: '[FK_CourseNo]', insertable: false, updateable: false


    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 2013-11-29
    • 2014-08-12
    相关资源
    最近更新 更多