我一直遇到Where注釋的問題我在MySQL 8.0.18上有兩個表,場地和音樂會,具有這種結(jié)構(gòu)和字段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條經(jīng)驗 獲得超15個贊
BorhSet
是空的,可能是因為current_date
is null
。在這種情況下,兩個謂詞都解析為false
。發(fā)生這種情況是因為 hibernate 無法解析名為 的列current_date
并將其設(shè)置為 null。
您可以通過使用 subselect 來解決這個問題,因為clause
它只是一個在創(chuàng)建查詢時粘貼到內(nèi)部的 sql 謂詞where
(這取決于您使用的數(shù)據(jù)庫):
@Where(clause = "date < (select * from current_date())")
或者在某些數(shù)據(jù)庫中更短:
@Where(clause = "date < (select current_date())")
PS:在我看來,這不是一個好的設(shè)計。測試更加困難,并且使得與這些集合有關(guān)的每個查詢都不可預(yù)測(相同的查詢可能會根據(jù)運行時間產(chǎn)生不同的結(jié)果)。

湖上湖
TA貢獻2003條經(jīng)驗 獲得超2個贊
我有相同的關(guān)聯(lián)(實際上是相同的 FK 列)映射多次 - 但因為 Hibernate 知道這是相同的 FK,所以它認為它們是相同的。
在調(diào)試Hibernate生成的SQL時發(fā)現(xiàn)的。
本質(zhì)上,這在實體上是不可能的
添加回答
舉報
0/150
提交
取消