我需要跟踪属性的M:N关系,所以我使用链接表(遵循Many-to-Many Mapping without Hibernate XML处的模式)...但是,我看不到如何查询该成员关系对于合法但尚未存在的关系,例如,给定团队中的任何员工不(或者用户尚未出价的项目等)。我正在使用HQL进行研究,但我是一个菜鸟,所以我可以使用一些关于哪种技术效果最好的指导...或者,这类查询的例子;)
对于讨论,只需假设Employees:Team Membership类,每个类都有一个非常大的集合(太大而不能直接进入中间层并进行设置操作)。
class Membership {
Employee employee
Team team
String other // I need attributes on the relationship
}
class Employee {
Date dateJoinedCompany
String name
static hasMany = [managedTeams:Team, memberships:Membership]
static mappedBy = [managedTeams:"manager"]
}
class Team {
String name
Employee manager
static belongsTo = Employee
static hasMany = [memberships:Membership]
}
所以,我需要一个查询,返回不在团队#2上的员工,他们在一个多月前对公司进行了公司处理,或者团队员工#5不属于这个团队,这类事情是什么是最好的技术 - 是否存在使用Criteria做到这一点的方法?或者,关于如何最好地使用HQL的任何建议?
我应该使用HQL和子选择添加我当前的想法:
from Team t where t not in (select m.team from Membership m where m.employee = 5)
TIA!
答案 0 :(得分:0)
一个多月前加入公司的第2队员工:
Employee.executeQuery("select e from Employee as e inner join e.memberships as m where m.team.id != :tId and e.dateJoinedCompany > :date", [tId: 2, date: new Date() - 60]
//calculate the exact date. instead of using the team id you can use the team instance
员工#5不属于
的团队Team.exccuteQuery("select t from Team as t inner join t.memberships as m where m.e.id != :eId",[eId: 5])