我正在处理一个使用hibernate的项目。我们有一个数据库,现在我想查询一下
在理想的情况下,我知道我可以通过对象的ID或使用Hibernate的查询语言来恢复对象。但是,如果有一种方法,我可以向其中发送一个具有我想用作过滤器的属性的对象,并返回该表中与这些标准匹配的所有对象,这对我来说将是最佳的。例如
Person p = new Person();
p.setName("Junior");
p.setAge(10);
session.Load(Person.class, p); //this would return all "junior" with age = 10
我想Hibernate会提供类似的功能。是吗?我应该使用哪种方法?
谢谢,Oscar
编辑:@nIKUNJ向我介绍了Criteria,这与我所需要的非常相似。问题是:我想要一个DatabaseManager类,它将处理保存、加载等功能。例如,我的负载看起来是这样的:
public <T extends Serializable> List<T> load(T filters, Class<T> type)
{
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
List<T> searchResult;
session.beginTransaction();
searchResult = ((List<T>)session.get(type, filters)); //assuming the method
//I asked for in the question exists
return searchResult;
}
通过这种方式,我将能够向该方法发送几乎任何对象,该方法将查询数据库并返回符合条件的对象列表。
你知道我如何使用Criteria类来模仿这种行为吗?
谢谢,Oscar
我认为Hibernate Criteria可以帮助您。
您可以使用一个具有三个属性的parameter
类:name, type and value
。Name
将是您列的名称,type
将是等于、小于、大于等条件类型,value
将是该条件的值
例如,name="person.age", type = greater equal, value=18
。创建一个实用程序方法,将这些参数转换为条件对象。
现在,创建一个这样的方法:
public <T extends Serializable> List<T> load(List<Parameter> params, Class<T> type)
{
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
List<T> searchResult;
session.beginTransaction();
Criteria criteria = createCriteriaFromParams(params);
searchResult = criteria.list();
return searchResult;
}
这是一个非常简单的场景。您可以通过在参数列表中添加一些额外的属性来创建一些复杂的条件。