我有以下類:JPA nativeQuery返回緩存resultList
Company.class:
public class Company {
@JoinTable(name = "company_employee", joinColumns = @JoinColumn(name = "company_id") , inverseJoinColumns = @JoinColumn(name = "employee_id"))
@ManyToMany(fetch = FetchType.LAZY)
private Set<Employee> employees;
@Column(name = "score")
private BigDecimal score;
}
和Employee.class
public class Employee {
@ManyToMany(fetch = FetchType.EAGER, mappedBy="employees")
private Set<Company> companies;
}
公司的得分列總是空的分貝並且從未通過dao更新,因爲其他表包含每個唯一對Company-Employee的分數。 我需要Score的值,僅當我通過id獲取Employee時發生這種情況,因此這種情況下,Set中的所有Company實例都應該包含分數,因此我將獲取員工獲取Employee的Employee-Company分數對。 我有下面的代碼來實現這一目標:
public Employee get(Long id) {
Employee emp = (Employee) dao.find(id);
List<Company> compList = compnanyService.getByEmpId(id);
Set<Company> compSet = new HashSet<Company>(compList);
emp.setCompanies(compSet);
return emp;
}
及公司道contains方法:
public List<Company> getByEmpId(Long id) {
final Query query = this.entityManager.createNativeQuery("select company.comp_id, ...some other fields, score.score from company join score on company.company_id=score.company_id where score.employee_id=:employee_id",
Company.class);
query.setParameter("employee_id", id);
List<Company> comps = query.getResultList();
return comps;
}
的問題是,getByEmpId(id)
給出ResultList
其中雖然在DB執行company.score
爲空不爲空。
我懷疑是有一些緩存干預,所以我試圖從本地查詢中刪除一些列,並且它應該在映射時調用異常並顯示「找不到列」(或類似)消息,但此方法仍然存在給出List<Company>
與他們的地方所有領域儘管Hibernate打印出我的本地查詢在控制檯與我做的所有更改。 我在這裏做錯了什麼,以及如何實現我所需要的?謝謝。
如果您已經在員工和公司之間擁有雙向@ManyToMany,您爲什麼使用本機查詢從員工ID檢索相關公司?看起來您並不需要它。 – yersan
因爲分數存儲在不同的表中,我需要連接才能檢索它。有沒有其他的方法? –
您有一個員工實體,其中包含與該員工相關的公司實體列表:設置公司;如果您能夠通過其id找到Employee實體,那麼您已經擁有該Employee的相關公司實體。出於這個原因,我不明白爲什麼你要從公共實體獲取(Long id){..}方法的數據庫中檢索公司實體列表。 –
yersan