用于在复合外键上连接表的Grails语法

时间:2011-09-15 15:09:02

标签: hibernate grails

有谁能告诉我如何在Grails中加入表格?我需要语法方面的帮助。

假设我有三个表,并且没有任何明确定义的外键约束:

 

  EMPLOYEE:
  empid
  name
  emp_deptid
  emp_teamid
  title
  salary
  hiredate
 
 

  DEPT:
  dept_deptid
  deptname
  location
  size
  numOfTeams
 
 

  TEAM:
  team_teamid
  teamname
  team_deptid
  responsibility
  size
  

我想在TEAMID和DEPTID上加入EMPLOYEE和TEAM。我知道如何在SQL查询中连接表。我真的想知道如何在Grails中进行表连接(在这些选定的列上使用OnetoOne,OnetoMany,hasMapped等)。感谢

修改

Class Emp(){

String empid
String teamid
String deptid
.....
.....
Date   hiredate

Team   team

static mapping = {
    ....
            .... 
    deptid column:'emp_deptid'
    teamid column:'emp_teamid'
    .....
            .....
    team column: ['teamid', 'deptid']
 }


}


Class Team(){
...
...
String teamid
String deptid

static mapping ={
...
deptid column:'team_deptid'
teamid column:'team_teamid'
....
}
}

2 个答案:

答案 0 :(得分:2)

GORM doc section 5.4.1 and 5.4.2中有2个小节,均名为“查询关联”。

修改

突然之间,这并不容易 - 抱歉是不专心。

Grails正式支持syntax for only compound primary keys,而不是外国人。我在Grails中发现了一堆关于复合外键的问题:GRAILS-4606GRAILS-4256

我可以提出可行的方法,但我自己没有测试过。

“列列表”语法(样本取自GRAILS-4256):

class Employee {
  Team team
  static mapping = {
     // ... column mapping
     team column: [team_id, dept_id]
  }
}

Lauro Becker使用custom configuration class添加了复合外键映射语法 - 这看起来对他有用。

有些人甚至用一个关键字段创建可更新的数据库视图,并将域映射到它们,而不是原始表 - 但我认为这是一种过度杀伤。

答案 1 :(得分:0)

有很多方法可以查询和加入grails。这是一个简单的方法来做两个表的SQL连接的一个例子:

class Dept {
    ...
}

class Team {
    ...
    Dept dept
}

Team.list(fetch: [dept: 'eager'])