我是Grails的新手。我有两个表之间多对一和一对多的生成关联的问题。我正在使用postgresql数据库。
Employee.groovy
class Employee {
String firstName
String lastName
int hoursLimit
Contact contact
Account account
Unit unit
char isBoss
static hasMany = [positionTypes:PositionType, employeePlans: EmployeePlan]
}
EmployeePlan.groovy
class EmployeePlan {
AcademicYear academicYear
HourType hourType
int hours
float weightOfSubject
Employee employee
static belongsTo = [SubjectPlan]
}
我想从员工访问employeePlans列表以及从EmployeePlan到Employee实例的访问权限。不幸的是,GORM只生成两个表Employee和EmployeePlan with employee_id。我没有第三个表,它应该有两列employee_id和employee_plan_id。你可以帮帮我吗 ?
答案 0 :(得分:0)
我认为您的设置是正确的,因为您从Employee类编写时可以访问EmployeePlan的集合(请注意,如果您没有像List一样明确定义EmployeePlan,默认情况下它将是一个Set)并且从EmployeePlan您可以访问Employee。 如果您需要List,可以这样定义:
class Employee {
String firstName
String lastName
int hoursLimit
Contact contact
Account account
Unit unit
char isBoss
//explicitly define List
List<EmployeePlan> employeePlans
static hasMany = [positionTypes:PositionType, employeePlans: EmployeePlan]
}
但回到你的问题。您想在Employee和employeePlan之间建立联接表,但为什么呢?它没有必要,因为你有集合(无序)的双向映射,grails不会创建连接表。你能解释一下为什么需要吗?在grails中,引用将自动填充,所以我在这里看不到任何问题。 如果需要保留employeePlans的顺序,则将其定义为List,如上所示,grails将创建一个带有相应索引的连接表。
答案 1 :(得分:0)
你读过ref-doc吗?它立即给你答案:
class Person {
String firstName
static hasMany = [addresses: Address]
static mapping = {
table 'people'
firstName column: 'First_Name'
addresses joinTable: [name: 'Person_Addresses',
key: 'Person_Id',
column: 'Address_Id']
}
}