使用Hibernate更新表中“多个”项的计数

时间:2013-02-28 06:16:38

标签: java hibernate orm count one-to-many

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

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更新到部门? (注释/限制或其他什么?)

2 个答案:

答案 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解决方案会有更好的性能。

相关问题