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
创建hibernate条件以将结果显示为此查询_Hibernate - Fatal编程技术网

创建hibernate条件以将结果显示为此查询

创建hibernate条件以将结果显示为此查询,hibernate,Hibernate,您好,请在下面的表格和查询。这是别人的帖子,但它正是我需要的。 我想创建Hibernate标准,不使用HQL或SQL生成与此表下面的SQL相同的结果 知道怎么做吗 这是我试过的,但不是正确的方法 criteria.setProjection( Projections.projectionList() .add(Projections.property("train")) .add(Projections.max("time")) .

您好,请在下面的表格和查询。这是别人的帖子,但它正是我需要的。 我想创建Hibernate标准,不使用HQL或SQL生成与此表下面的SQL相同的结果

知道怎么做吗

这是我试过的,但不是正确的方法

criteria.setProjection(
        Projections.projectionList()
        .add(Projections.property("train"))
        .add(Projections.max("time"))
        .add(Property.forName("train").group())
        );
火车台

Train    Dest      Time
1        HK        10:00
1        SH        12:00
1        SZ        14:00
2        HK        13:00
2        SH        09:00
2        SZ        07:00
SQL

结果

Train    Dest      Time
1        SZ        14:00
2        HK        13:00

只需使用nativequery直接运行MySQL查询。这是最简单也是最好的方法。请试试这个:

@Autowired
    private SessionFactory mySessionFactory;


    String query ="SELECT t.Train, t.Dest, r.MaxTime "
       +" FROM (SELECT Train, MAX(Time) as MaxTime FROM TrainTable GROUP BY Train) r "
       +" INNER JOIN TrainTable t "
       +" ON t.Train = r.Train AND t.Time = r.MaxTime";

    List<Object[]> list = (List<Object[]>) mySessionFactory.getCurrentSession().createNativeQuery(query)
                    .getResultList();

考虑到我不知道这些模型及其相互关系,我认为类似的内容将指导您:

Criteria cr = session.createCriteria(R.class)
        .setProjection(Projections.projectionList()
        .add(Projections.property("train"), "train")
        .add(Projections.property("dest"), "dest"))
        .add( Projections.groupProperty("train"), "train" )
        .createCriteria("trainTable").add(Projections.max("maxTime"))
        .setResultTransformer(Transformers.aliasToBean(R.class));

      List<R> list = cr.list();

有关更多信息,请尝试在上搜索,并

感谢您的回答。我在hibernate中使用hibernate本机查询,它工作正常。但我仍然需要通过条件完成它。不工作。org.hibernate.QueryException:无法解析属性:traintTableOf:com.model.traintTable
Criteria cr = session.createCriteria(R.class)
        .setProjection(Projections.projectionList()
        .add(Projections.property("train"), "train")
        .add(Projections.property("dest"), "dest"))
        .add( Projections.groupProperty("train"), "train" )
        .createCriteria("trainTable").add(Projections.max("maxTime"))
        .setResultTransformer(Transformers.aliasToBean(R.class));

      List<R> list = cr.list();