0

我的数据库中有一个简单的一对多关系。以下是对应的类:

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每个员工向部门添加/删除的信息?(注释/限制或什么?)

4

2 回答 2

1

为什么要在员工人数中保留一个全局变量?添加一个返回员工列表大小的方法更安全、更优雅。

public class Department {

   private int deptId;
   private List<Employee> employees;

   public int getCount() {
      if (employees == null) {
         return 0;
      }
      return employees.size();
   }
}
于 2013-02-28T10:15:06.223 回答
0

据我所知,Hibernate 中没有自动方式。

无论如何,通常这有可能产生错误的结果。如果一个用户添加了一名员工,同时第二个用户删除了另一名员工,会发生什么?(这种情况仍然可以在 Hibernate 中处理。)或者如果 dba 通过插入语句添加一些员工或从备份加载数据会发生什么?

在数据库模型看来,这是多余的信息,应该省略。相反,SELECT COUNT(*) FROM employee WHERE dept =:deptId应该使用 a。

计数列的唯一原因是如果您经常需要计数并且您在使用 select(*) 时遇到性能问题。对于这种特殊情况,没有 Hibernate 自动化。

编辑:

我现在才看到 Overmeulens 的回答。这也行得通。如果您只需要计数,那么SELECT COUNT(*)(也可以在 HQL 中完成)更快,如果您仍然需要员工记录,那么 Overmeulens 解决方案具有更好的性能。

于 2013-02-28T10:31:46.087 回答