Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按自定义对象休眠条件检索数据_Java_Hibernate_Hibernate Criteria - Fatal编程技术网

Java 按自定义对象休眠条件检索数据

Java 按自定义对象休眠条件检索数据,java,hibernate,hibernate-criteria,Java,Hibernate,Hibernate Criteria,任务是从数据库中检索特定列列表的数据,并作为已存在的自定义类返回 我尝试使用以下代码解决此任务: public List<EntityOne> getServiceProviders(EntityTwo EntityTwo) { Criteria criteria = createCriteria(EntityOne.class); criteria.add(Restrictions.eq("EntityTwo", EntityTwo));

任务是从数据库中检索特定列列表的数据,并作为已存在的自定义类返回

我尝试使用以下代码解决此任务:

public List<EntityOne> getServiceProviders(EntityTwo EntityTwo) {
        Criteria criteria = createCriteria(EntityOne.class);
        criteria.add(Restrictions.eq("EntityTwo", EntityTwo));
        criteria.createAlias("spid", "two");
        criteria.addOrder(Order.asc("two.entityName"));

        criteria.setProjection(Projections.projectionList()
                .add(Projections.property("entityId"), "entityId")
                .add(Projections.property("publishStatus"), "publishStatus")
                .add(Projections.property("two.entityName"), "two.entityName")
                .add(Projections.property("two.entityId"), "two.entityId")
        );

        return criteria.list();
    }
公共列表getServiceProviders(EntityTwo EntityTwo){ Criteria=createCriteria(EntityOne.class); 标准。添加(限制。等式(“EntityTwo”,EntityTwo)); createAlias(“spid”、“两个”); 标准.addOrder(Order.asc(“two.entityName”)); criteria.setProjection(Projections.projectionList()的标准) .add(Projections.property(“entityId”),“entityId”) .add(Projections.property(“publishStatus”),“publishStatus”) .add(Projections.property(“two.entityName”),“two.entityName”) .add(Projections.property(“two.entityId”),“two.entityId”) ); 返回条件。list(); }
但是我收到了一个数据列表,这些数据没有按照我的要求分组到类中。

您应该使用
Projections.groupProperty(propertyName)


你的问题不是很清楚,尤其是当你试图使用
Restrictions.eq(“EntityTwo”,EntityTwo)
时,因为这不会给出正确的结果。然而,Hibernate提供了一种从使用Hibernate
Transformers
类选择的列中返回对象的方法。在本例中,您将需要编写一个自定义类,其中包含要返回的列的
getter setter
。请注意,变量的命名必须与别名列完全相同

由于您的示例不清楚,让我用一个简单的示例来说明:假设我需要所有采购
OrderAmount
OrderDate
OrderNumber
分组

 public static List<YourCustomEntity> getAggregateOrders(){
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction tx = null;
    List<YourCustomEntity> list =  new ArrayList<YourCustomEntity>();
    try {
        tx = session.beginTransaction();
        Criteria cr = session.createCriteria(PurchaseOrders.class);
        cr.setProjection(Projections.projectionList()
                .add(Projections.sum("orderAmount").as("sumOrderAmount"))
                .add(Projections.groupProperty("orderNumber").as("agOrderNumber"))
                .add(Projections.groupProperty("orderDate").as("agOrderDate")));
        cr.setResultTransformer(Transformers.aliasToBean(YourCustomEntity.class));
        list = (List<YourCustomEntity>) cr.list();
   }catch (Exception asd) {
        System.out.println(asd.getMessage());
        if (tx != null) {
            tx.rollback();
        }
    } finally {
        session.close();
    }
     return list;
}
NB:注意变量的命名与列别名相同

 public static List<YourCustomEntity> getAggregateOrders(){
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction tx = null;
    List<YourCustomEntity> list =  new ArrayList<YourCustomEntity>();
    try {
        tx = session.beginTransaction();
        Criteria cr = session.createCriteria(PurchaseOrders.class);
        cr.setProjection(Projections.projectionList()
                .add(Projections.sum("orderAmount").as("sumOrderAmount"))
                .add(Projections.groupProperty("orderNumber").as("agOrderNumber"))
                .add(Projections.groupProperty("orderDate").as("agOrderDate")));
        cr.setResultTransformer(Transformers.aliasToBean(YourCustomEntity.class));
        list = (List<YourCustomEntity>) cr.list();
   }catch (Exception asd) {
        System.out.println(asd.getMessage());
        if (tx != null) {
            tx.rollback();
        }
    } finally {
        session.close();
    }
     return list;
}
public class YourCustomEntity {

    private double sumOrderAmount;
    private String agOrderNumber;
    private Date agOrderDate;
   //And then the getters and setters