我的数据库中有一个简单的一对多关系。以下是相应的类:
class Department
{
int deptId;
int count; //This corresponds to the total number of Employees in a department
List<Employee> employees; //An employee belongs to only one department
}
class Employee
{
int employeeId;
Department dept;
}
为了更新count
,我在每个count
操作上设置了CUD
。是否有自动方式将员工的每次添加/删除count
更新到部门? (注释/限制或其他什么?)
答案 0 :(得分:1)
为什么要保留员工数量的全局变量? 添加一个返回员工列表大小的方法更安全,更优雅。
public class Department {
private int deptId;
private List<Employee> employees;
public int getCount() {
if (employees == null) {
return 0;
}
return employees.size();
}
}
答案 1 :(得分:0)
据我所知,Hibernate中没有自动方式。
无论如何,通常这会产生错误的结果。如果一个用户添加了一个员工,同时另一个用户删除了另一个员工,会发生什么? (这种情况仍然可以在Hibernate中处理。)或者如果dba通过insert语句添加一些员工或从备份加载数据会发生什么?
在数据库模型的视图中,这是多余的信息,应该省略。相反应该使用SELECT COUNT(*) FROM employee WHERE dept =:deptId
。
计数列的唯一原因是,如果您经常需要计数,并且您在选择(*)时遇到性能问题。对于这种特殊情况,没有Hibernate自动化。
编辑:
我刚看到Overmeulens现在回答。这也有效。如果您只需要计数,那么SELECT COUNT(*)
(也可以在HQL中完成)会更快,如果您还需要员工记录,那么Overmeulens解决方案会有更好的性能。