我有两个这样的表:

+------------+             +------------+
| Parent     |             | Child      |
+------------+             +------------+
|child_id    |------------>|id          |
|id          |             |date        |
|name        |             +------------+
+------------+


我需要提取Parent类型的对象,具体取决于date

这是我的查询:

Query query = session.createQuery(
      "SELECT p.child_id, p.id, p.name from Parent p, Child c
       WHERE p.child_id = c.id
       AND c.date between :date and CURRENT_DATE ");

query.setTimestamp("date",new Date(2012,1,1));

List<Parent> objList = query.list()     // List<Object[]> instead of List<Parent>


我已经尝试了好几个小时,然后就再也无法接近了。您能否告诉我查询的问题或如何实现我的目标?

编辑:我发现一个问题:new Date(2012,1,1)正在创建3092年的日期,我通过通过java.sql.Date添加日期来解决它

结果是一个List<Object[]>,我知道我可以迭代每个对象向量,并使用对象中的值创建一个新的Parent,但是没有办法我可以直接从查询列表中获取一个Parent对象吗?

最佳答案

如果使用此呼叫,时间将被切断:

query.setDate(...);


而是使用以下调用:

query.setTimestamp(...)


也尝试使用Criteria Queries

如:

criteria.add(Expression.eq("date", new Date()));




如果查询没有日期限制,则可以通过比较日期进行一些实验。
例如,如下:

...
Date customDate = new Date(2012, 1, 1);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

StringBuilder query = new StringBuilder("from Child c");
query.append(" where c.date >= '" + simpleDateFormat.format(customDate) + "'");

Query result = session.createQuery(query.toString());
List resultList = result.list();
...

07-25 22:41
查看更多