我在Spring Boot中构建HQL查询时遇到问题。 有同样的问题,但在HQL中我找不到匹配的答案,这让我很清楚。
示例状态:
class Reservations{
...
@ManyToMany
List<Day> avaDays;
@ManyToMany
List<Day> blockedDays;
}
class Day{
...
Date date;
}
现在我想查找所有可用但未被阻止的预订。 最后来到这里:
@Query("
SELECT r.id, d.date
FROM Reservation r, Day d
LEFT OUTER JOIN r.blockedDays
LEFT JOIN r.avaDays
WHERE d.date = 1506297600000"
......并且没有结果。查询好吗?或者我错过了什么?
我现在很困惑,需要一点提示继续^^
先谢谢!
编辑:更进一步......
@Query("
SELECT r.id, d.date
FROM Reservation r
LEFT OUTER JOIN r.blockedDays bd
LEFT OUTER JOIN r.avaDays ad
LEFT OUTER JOIN "furtherfilter"
WHERE ad.date = 1506297600000 AND bd.date != 1506297600000"
它有效。直到我在该查询上添加“进一步过滤器”,创建没有blockedDays条目的行...并显示该行无论如何。 我猜我现在需要再看看JOIN了。?
EDIT2:“解决方案”
上面的查询是对的。我在@Temporal(TemporalType.DATE)
遇到了另一个问题,我在这里没有说过。
DB中保存的日期为:'2017-09-26 02:00:00' 并试图搜索:'2017-09-26'
它在MySQL DB上没有匹配,所以它返回所有匹配(来自进一步的过滤器)
答案 0 :(得分:0)
这应该有效
SELECT r.id FROM Reservation r
WHERE d.avaDays.date = 1506297600000 and r.blockedDays.date != 1506297600000
但我觉得你的架构可能需要改变,你应该只需要blockedDays
。如果您可以详细说明您的要求,我可以提供帮助。
答案 1 :(得分:0)
@Query("
SELECT r.id, d.date
FROM Reservation r
LEFT OUTER JOIN r.blockedDays bd
LEFT OUTER JOIN r.avaDays ad
LEFT OUTER JOIN "furtherfilter"
WHERE ad.date = 1506297600000 AND bd.date != 1506297600000"
它有效。直到我在该查询上添加“进一步过滤器”,创建没有blockedDays条目的行...并显示该行无论如何。 我猜我现在需要再看看JOIN了。?
EDIT2:“解决方案”
上面的查询是对的。我在@Temporal(TemporalType.DATE)
遇到了另一个问题,我在这里没有说过。
DB中保存的日期为:'2017-09-26 02:00:00' 并试图搜索:'2017-09-26'
它在MySQL DB上没有匹配,所以它返回所有匹配(来自进一步的过滤器)