【发布时间】:2019-04-07 10:06:09
【问题描述】:
我遇到了 Hibernate 条件查询问题。
表DataStatus数据如下:
|-------------|--------------|--------------|---------------------|
| name | info | server | starttime |
|-------------|--------------|--------------|---------------------|
| Bob | information1 | www1 | 2018-02-14 10:32:43 |
| Alice | information2 | www3 | 2018-02-14 17:34:43 |
| Bob | information3 | www2 | 2018-02-14 10:32:43 |
| Alice | information4 | www1 | 2018-02-14 11:25:51 |
| Alice | information5 | www2 | 2018-02-14 08:42:25 |
| Bob | information6 | www3 | 2018-02-14 10:32:43 |
|-------------|--------------|--------------|---------------------|
查询如下所示:
SELECT * FROM DataStatus sts
WHERE sts.server IS NOT NULL
AND sts.name = 'Bob'
AND sts.starttime < (
SELECT starttime FROM DataStatus
WHERE name = 'Alice' AND server = sts.server);
结果如下所示:
|-------------|--------------|--------------|---------------------|
| name | info | server | starttime |
|-------------|--------------|--------------|---------------------|
| Bob | information1 | www1 | 2018-02-14 10:32:43 |
| Bob | information6 | www3 | 2018-02-14 10:32:43 |
|-------------|--------------|--------------|---------------------|
我尝试过类似以下的方法:
Criteria criteria = session.CreateCriteria(DataStatus.class);
criteria.add(
Restrictions.and(
criteria.add(Restrictions.isNotNull("server")),
criteria.add(Restrictions.eq("name", "Bob")),
criteria.add(Restrictions.lt("starttime", ))
)
);
我不知道如何使用 Hibernate 条件实现这个嵌套的 where 和 select 查询?
提前致谢。
【问题讨论】:
-
你确定 sql 查询有效吗,我怀疑它会返回一个错误,说子查询返回多于一行或类似的东西
-
嗨@JoakimDanielson,我很确定SQL 是正确的。它为我返回了正确的数据。
-
@Almett 您的查询仅返回 1 行:
"Bob" "information1" "www1" "2018-02-14 10:32:43"。也许您发布的数据不是实际数据。同样在您的查询中将'ALice'更改为'Alice',除非它是拼写错误或相等不区分大小写。 -
非常抱歉,这是“爱丽丝”而不是“爱丽丝”。我更改了 Alice(www3) 的
starttime以使其大于 Bob(www3) 的“开始时间”。现在它返回与我相同的结果。感谢您的努力。 -
@JoakimDanielson 假设 (name, server) 是唯一的 OP 就可以了,如果不是.. 可能会出现问题!
标签: java mysql hibernate hibernate-criteria