【发布时间】:2019-03-08 05:54:55
【问题描述】:
我刚开始使用 Hibernate,我正在使用它来使用 Jersey 构建一个 RESTful API。
为了习惯 Hibernate,我正在尝试为这个实体实现 CRUD 操作(为方便起见,我排除了 getter、setter 和注释):
public class People implements java.io.Serializable {
private Integer id;
private String name;
private String surname;
private String phone;
private String email;
private String dui;
private String address;
private Boolean state;
private Set userses = new HashSet(0);
public People() {
}
public People(String name, String surname, String phone, String email, String dui, String address) {
this.name = name;
this.surname = surname;
this.phone = phone;
this.email = email;
this.dui = dui;
this.address = address;
}
public People(String name, String surname, String phone, String email, String dui, String address, Boolean state, Set userses) {
this.name = name;
this.surname = surname;
this.phone = phone;
this.email = email;
this.dui = dui;
this.address = address;
this.state = state;
this.userses = userses;
}
}
由于我想获取该实体的记录列表而不是其子实体(在这种情况下是用户 [是的,我知道该字段有一个有趣的名称]),因此我使用实体的构造函数获取列表:
SessionFactory sesFact = HibernateUtil.getSessionFactory();
Session ses = sesFact.openSession();
Transaction tra = null;
tra = ses.beginTransaction();
String queryString = "SELECT new People(p.name, p.surname, p.phone, p.email, p.dui, p.address) FROM People p";
Query query = ses.createQuery(queryString, People.class);
List<People> people = query.list();
这种方法的问题是我得到的实体列表没有它们各自的 ID,我需要将它们放在返回列表中(...除非 Hibernate 有特定的理由不这样做,我是不知道。如果有这样的事情,如果你指出这一点,我将不胜感激。
那么,实现这一目标的最佳方法是什么?
我看到 Hibernate 生成的构造函数都没有将 id 作为参数。有什么原因吗?
我可以创建一个包含 id 作为参数的自定义构造函数,但我真的不想更改生成的 POJO,因为我的数据库很可能会更改,而且我不想丢失所有硬编码如果我自动重新生成 POJO 的东西。
【问题讨论】: