为了账号安全,请及时绑定邮箱和手机立即绑定

Hibernate @Where 注解语法问题

Hibernate @Where 注解语法问题

qq_笑_17 2024-01-28 20:32:49
我一直遇到Where注释的问题我在MySQL 8.0.18上有两个表,场地和音乐会,具有这种结构和字段CREATE TABLE VENUE(    ID          INT          NOT NULL AUTO_INCREMENT,    NAME        VARCHAR(220) NOT NULL,    IMAGE       VARCHAR(240),    ACTIVE      BIT          NOT NULL DEFAULT 0,    COORDINATES VARCHAR(120),    COUNTRY     VARCHAR(120) NOT NULL DEFAULT 'USA',    CITY        VARCHAR(220) NOT NULL DEFAULT 'None',    RATING      INT          NOT NULL DEFAULT 0,    VERSION     INT          NOT NULL DEFAULT 0,    PRIMARY KEY (ID));CREATE TABLE CONCERT(    ID          INT          NOT NULL AUTO_INCREMENT,    NAME        VARCHAR(120) NOT NULL,    DESCRIPTION VARCHAR(120) NOT NULL,    FESTIVAL_ID INT,    VENUE_ID    INT,    RATING      INT          NOT NULL DEFAULT 0,    DATE        DATETIME,    IMAGE       BLOB,    VERSION     INT          NOT NULL DEFAULT 0,    FOREIGN KEY (FESTIVAL_ID) REFERENCES FESTIVAL (ID),    FOREIGN KEY (VENUE_ID) REFERENCES VENUE (ID),    PRIMARY KEY (ID));
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

BorhSet是空的,可能是因为current_dateis null。在这种情况下,两个谓词都解析为false。发生这种情况是因为 hibernate 无法解析名为 的列current_date并将其设置为 null。

您可以通过使用 subselect 来解决这个问题,因为clause它只是一个在创建查询时粘贴到内部的 sql 谓词where(这取决于您使用的数据库):

@Where(clause = "date < (select * from current_date())")

或者在某些数据库中更短:

@Where(clause = "date < (select current_date())")

PS:在我看来,这不是一个好的设计。测试更加困难,并且使得与这些集合有关的每个查询都不可预测(相同的查询可能会根据运行时间产生不同的结果)。


查看完整回答
反对 回复 2024-01-28
?
湖上湖

TA贡献2003条经验 获得超2个赞

我有相同的关联(实际上是相同的 FK 列)映射多次 - 但因为 Hibernate 知道这是相同的 FK,所以它认为它们是相同的。

在调试Hibernate生成的SQL时发现的。

本质上,这在实体上是不可能的



查看完整回答
反对 回复 2024-01-28
  • 2 回答
  • 0 关注
  • 194 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信