我正在开发一个使用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会提供类似的功能。可以?我应该使用哪种方法?
谢谢, 奥斯卡
编辑: @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类的这种行为吗?
谢谢, 奥斯卡
答案 0 :(得分:1)
我认为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;
}
这是一个非常简单的场景。您可以通过在参数列表中添加一些额外属性来创建一些复杂的标准。