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