亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 438 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號