我有以下课程:
公司类别:
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;
}
Company 的 Score 列在数据库中始终为空,并且从未通过 dao 更新,因为还有其他表包含每个唯一对 Company-Employee 的分数。我需要 Score 的值,仅适用于我通过 id 获取 Employee 的情况,因此在这种情况下,Set 中的所有 Company 实例都应该包含 score,因此我将获得 Employee-Company 分数对,其中员工是 Employee。我有以下代码来实现这一点:
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;
}
而公司道包含方法:
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
位置。company.score
我怀疑有一些缓存介入,所以我尝试从本机查询中删除一些列,并且它应该在映射时调用一个异常,并显示“未找到列”(或类似)消息,但这种方法仍然提供List<Company>
所有字段尽管 Hibernate 在控制台中打印出我所做的所有更改的本机查询,但在他们的位置上。我在这里做错了什么以及如何实现我的需要?谢谢你。