【问题标题】:Aggregate functions in DAODAO 中的聚合函数
【发布时间】:2017-01-10 01:12:44
【问题描述】:

我有一些简单的域模型来描述数据库中的人员表:

@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 {
//
}

在这项服务中,我想使用一些标准(以名字为例)从 DAO 获取“COUNT(*)”、“MAX(age)”、“MIN(age)”。 这样做的正确方法是什么?

  1. 在 DAO 中定义 3 种不同的方法(如 getCount(firstname)、 getMin(firstname), getMax(firstname)) - 非常糟糕的方式,因为它会 使用 WHERE 语句执行 3 个不同的查询,速度很慢 与大数据。
  2. 用这 3 个定义一些模型,如“PersonsInfo” 字段并从单个查询中返回此模型 - 我认为不好,因为此模型不是域模型。

那么,解决这个问题的正确方法是什么?

【问题讨论】:

    标签: java database hibernate service dao


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 2021-04-07
      • 2021-12-31
      • 2011-04-08
      • 2018-05-15
      • 2021-12-31
      • 2017-05-10
      相关资源
      最近更新 更多