私は3つのテーブルを持っています:
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オブジェクトは非常に大きく、会社ごとに数千人の従業員がいます(したがって、非常に怠惰です)。
今、私は得ることができます(そして持っています)
companyDao.getEmployeesFor(Company...)
companyDao.getEmployeeCountFor(Company...)
でも少し気分が悪いので、ダオなしでやりたいです。