使用数据库函数在hibernate标准中转换列

use*_*088 5 java hibernate criteria

尽管使用了3个小时的谷歌搜索和搜索API,我找不到任何关于是否可以在休眠标准查询中使用数据库函数的参考.再具体一点:

我想在postgres数据库和组中访问日期时间的日期部分.我想这个查询看起来像这样:

session.createCriteria(Exam.class)
  .setProjection(Projections.projectionList()
    .add(Projections.property("DATE(beginExam)").as("beginDate"))
    .add(Projections.groupProperty("beginDate")))
  .list();
Run Code Online (Sandbox Code Playgroud)

这不起作用,给我一个"无法解析属性:Date(beginExam)..."异常.看起来这是一件非常简单的事情,我一定会错过一些东西.鉴于我也在动态构建限制(我在示例中已经将其排除在外),似乎标准是用于此的hibernate组件,但是我对这方面的任何建议持开放态度,而不是整个问题的步骤通过建立我自己的小组.

谢谢

tsc*_*cho 9

你有没有试过像这样的Projections.sqlProjection

session.createCriteria(Exam.class)
  .setProjection(Projections.projectionList()
  .add(Projections.sqlProjection("date(beginExam) as beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE }))
  .add(Projections.groupProperty("beginDate")))
.list();
Run Code Online (Sandbox Code Playgroud)

或者像这样的Projections.sqlGroupProjection

session.createCriteria(Exam.class)
  .setProjection(Projections.sqlGroupProjection("date(beginExam) as beginDate", "beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE }))
.list();
Run Code Online (Sandbox Code Playgroud)

Hibernate在SQL查询中生成表别名,因此您可能需要将该{alias}片段添加到SQL片段中以使其工作:

session.createCriteria(Exam.class)
  .setProjection(Projections.projectionList()
  .add(Projections.sqlProjection("date({alias}.beginExam) as beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE }))
  .add(Projections.groupProperty("beginDate")))
.list();
Run Code Online (Sandbox Code Playgroud)

或者SQLGroupProjection:

session.createCriteria(Exam.class)
  .setProjection(Projections.sqlGroupProjection("date({alias}.beginExam) as beginDate", "beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE }))
.list();
Run Code Online (Sandbox Code Playgroud)


gka*_*mal 2

看一下Projections.sqlProjection和 Porjections.sqlGroupProjection