У меня есть некоторые простые модели предметной области, которая описывает таблицу лиц в БД:агрегатные функции в DAO
@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 (возраст)" от D AO, используя некоторые критерии (по первому имени в качестве примера). Каков правильный способ сделать это?
- Определение 3 различных методов в DAO (как GetCount (Firstname), getMin (Firstname), getMax (Firstname)) - очень плохой способ, так как он будет выполнить 3 различных запросов с ИНЕКЕ и очень медленный с большими данными.
- Определите некоторую модель типа «Персоналии» с этими полями 3 и верните эту модель из одного запроса - я думаю, что это плохо, потому что эта модель не является моделью домена.
Итак, каков правильный способ решить эту проблему?