Hibernate 如何使用JPA2中的示例对象获取数据

Hibernate 如何使用JPA2中的示例对象获取数据,hibernate,jpa-2.0,criteria-api,query-by-example,Hibernate,Jpa 2.0,Criteria Api,Query By Example,我正在使用Hibernate3.5.6和JPA2 这是我的密码: public List<Route> searchRoutesEndingAt(GeoLocation destinationLocation, int destinationRangeInMeters, RouteUserPref routeUserPref) { Query query = entityManager.createNamedQuery("searchRoutesEndin

我正在使用Hibernate3.5.6和JPA2

这是我的密码:

  public List<Route> searchRoutesEndingAt(GeoLocation destinationLocation,
        int destinationRangeInMeters, RouteUserPref routeUserPref) {
    Query query = entityManager.createNamedQuery("searchRoutesEndingAt");
    query.setParameter("lat1", destinationLocation.getLatitude());
    query.setParameter("lng1", destinationLocation.getLongitude());
    query.setParameter("destinationRangeInMeters", destinationRangeInMeters);
    try {
        return query.getResultList();
    } catch (NoResultException ex) {
        return null;
    }
}
公共列表搜索路由搜索,
int目的地测距仪,RouteUserPref RouteUserPref){
Query Query=entityManager.createNamedQuery(“searchRoutesEndingAt”);
setParameter(“lat1”,destinationLocation.getLatitude());
setParameter(“lng1”,destinationLocation.getLongitude());
query.setParameter(“destinationRangeInMeters”,destinationRangeInMeters);
试一试{
返回query.getResultList();
}捕获(noresultex异常){
返回null;
}
}

在上面的代码中,我想根据routeUserPref筛选结果集,routeUserPref具有各种属性。

您可以使用Criteria API尝试以下代码

Criteria criteria = session.createCriteria(RouteUserPref.class).add(routeUserPref);
return criteria.list();

您将无法使用EntityManager afaik执行此操作,因为它未包含在标准中

然而,我认为所有供应商都实施了它,对您来说,它将是这样的:

冬眠

使用Hibernate的标准API:

// get the native hibernate session
Session session = (Session) getEntityManager().getDelegate();
// create an example from our customer, exclude all zero valued numeric properties 
Example customerExample = Example.create(customer).excludeZeroes();
// create criteria based on the customer example
Criteria criteria = session.createCriteria(Customer.class).add(customerExample);
// perform the query
criteria.list();
摘自:


顺便说一句,他在openjpa上的例子是不完整的。如果需要更好的版本,请在评论中Ping我。

我使用的是实体管理器,我没有直接访问hibernate会话的权限。所以这行不通。