更优化的解决方案是使用休眠标准,而不是硬编码的 SQL 查询。您应该为您的 User 类声明一个 @Entity 注释,并创建与您的表的列相对应的私有字段。
假设您有一个带有 id、name 和 age 的 User 表。User 类将如下所示:
@Entity
@Table(name = "User")
public class User{
private long id;
private String userName;
private int age;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "userName", nullable = false)
public String getUserName() {
return this.userName;
}
@Column(name = "age")
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
注意:如果数据库表中的列与您的字段具有完全相同的名称,则不需要 @Column (name = "..") 注释。
然后,检索年龄将是:
int userAge = session.createCriteria(User.class)
.add(Restrictions.ge("age", a))
.add(Restrictions.le("age", b))
.setProjection(Property.forName("age"))
.uniqueResult();
通过 User 类创建条件告诉 hibernate从 User表中进行选择。然后,这些限制分别意味着age >= a和age <= b。uniqueResult ()告诉 hibernate 我们期望一个结果,而需要投影来检索某个列(那里的投影意味着从 User 中选择年龄)。如果未指定投影,则标准将默认返回整个类,即select * from User。
我知道这对于您需要的东西来说似乎有点太复杂了,但是使用与您的表和标准匹配的实体是正确的方法。