DAO中的聚合函数

时间:2017-01-10 01:12:45

标签: java database hibernate service dao

我有一些简单的域模型,用于描述db中的人员表:

@Entity
@Table(name = "persons")
public class Person {

private int id;
private String firstName;
private String lastName;
private int age;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

@Column
public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

@Column
public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

@Column
public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

}

我还有一些适用于此模型的DAO类:

class PersonDao {
// getById
// add
// remove
// etc
}

我也有一些服务,适用于此PersonDAO:

class PersonService {
//
}

在这项服务中,我希望得到" COUNT(*)"," MAX(年龄)"," MIN(年龄)"来自DAO,使用一些标准(以名字为例)。 这样做的正确方法是什么?

  1. 在DAO中定义3种不同的方法(如getCount(firstname), getMin(firstname),getMax(firstname)) - 非常糟糕的方式,因为它会 使用WHERE语句执行3个不同的查询,速度非常慢 有大数据。
  2. 定义一些模型,例如" PersonsInfo"这3个     字段并从单个查询返回此模型 - 我认为不好的方式,因为这个模型不是域模型。
  3. 那么,解决这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

假设您正在使用Hibernate作为DAO层,使用非持久模型(第二种建议的方式)获取三个字段是一种糟糕的方式,如您所说。 然后接受第一个选择并让Hibernate为您完成工作并执行聚合函数,这是可以接受的。对于性能问题,Hibernate人员建议使用HQL或条件查询来处理这类案例。Hibernate Documentation