假設我有以下領域:有條件獲取相關實體避免選擇N + 1個問題
public class Company
{
public long Id;
}
public class EmployeeDetailsInCompany
{
public long Id;
public Company Company;
}
public class Employee
{
public long Id;
public List<EmployeeDetailsInCompany> EmployeeDetailsInCompany;
}
public class Position
{
public long Id;
public Employee Employee;
public Company Company;
}
(請注意,這是一個非常簡化的版本,以使問題更容易理解。)
基本上我想訪問EmployeeDetailsInCompany
Employee
我有一個Position
實體。目前,我必須遍歷我在Employee
上的列表,並找到,它的Company.Id
與我的Company
實體相匹配。這是因爲Position
只適用於在某一Company
一定Employee
,所以這也正是EmployeeDetailsInCompany
得到英寸
這裏最好的辦法是將有Position
和EmployeeDetailsInCompany
之間的關聯,但這是不可能的,因爲該表上的數據可能會發生變化(例如,公司可能會決定清除所有員工的詳細信息並再次加載新數據)。
是否有可能重寫這些關聯,因此我不會陷入SELECT N + 1問題(現在正在發生,我必須循環訪問列表)?我怎麼能改變它,使它更容易找到我想要的細節,而沒有太多麻煩?
我曾考慮在Position
上創建一個EmployeeDetailsInCompany
,它將使用公式映射,但這會給我一個只讀列,我試圖避免HQL。
批量讀取解決了我的問題,因爲一個'Employee'不可能有很多相應的'EmployeeDetailsInCompany'。 –