我有三张桌子:
Company
id name
1 Fred Co.
Person
id name
1 Fred
Employee
id company_id person_id rank
1 1 1 1
2 1 1 2
现在排名被不同的应用程序使用,但对于我正在使用的内容,我并不关心它。我想做的是创建一个只返回唯一员工的休眠映射(通过域模型)。
我目前有
class Person {
@Column(name = "id")
Long id;
@Column(name = "name")
String id;
}
class Company {
@Column(name = "id")
Long id;
@Column(name = "name")
String id;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "EMPLOYEE",
joinColumns = { @JoinColumn(name = "COMPANY_ID") },
inverseJoinColumns = { @JoinColumn(name = "PERSON_ID") })
@LazyCollection(LazyCollectionOption.EXTRA)
List<Person> employees = new ArrayList<Person>();
}
但这意味着fredCo.employees.size() == 2
。如何过滤以便只返回唯一的人?
我想通过域模型来做到这一点。
编辑:虽然上面的例子很小,但在现实生活中,Person 对象非常大,每个公司有 1000 名员工(因此非常懒惰)。
现在我可以(并且已经)得到一个
companyDao.getEmployeesFor(Company...)
companyDao.getEmployeeCountFor(Company...)
但感觉有点恶心,我想在没有 Dao 的情况下这样做。