我想用JoinTable設置JPA映射,並且它在Hibernate(我的JPA實現)正在執行查詢時似乎被忽略。使用中間表(中間實體)的兩個ManyToOne的JPA映射
要講解使用情況
用戶每次得到我的應用程序的頁面,我插在USAGE_LOG表中的一行(與用戶的ID和頁面ID)。每個頁面與一個類別(例如:settings,orders,items,news ...)和一個類型(例如創建,更新,顯示,刪除)相關。
所以,我有一種中間實體表,即將頁面鏈接到:一個類別+一個類型。就像三重:(頁,類別,類型)
我的表結構
table USAGE_LOG (for information only, this one works well)
ID PrimaryKey
USER_ID Foreign key to column ID of table USER
USAGE_LOG_PAGE_ID Foreign key to column ID of table USER_LOG_PAGE
table USAGE_LOG_PAGE
ID PrimaryKey
URL VARCHAR
USER_ACTION_ID Foreign key to column ID of table USER_ACTION
table USER_ACTION
ID PrimaryKey
ACTION_CATEGORY_ID Foreign key to column ID of table ACTION_CATEGORY
ACTION_TYPE_ID Foreign key to column ID of table ACTION_CATEGORY
table ACTION_CATEGORY
ID PrimaryKey
NAME VARCHAR
table ACTION_TYPE
ID PrimaryKey
NAME VARCHAR
所以USER_ACTION表是一個聯合表的特殊性在於它一USAGE_LOG_PAGE鏈接到ACTION_CATEGORY並在ACTION_TYPE同一時間。
此外,我可以有幾個USAGE_LOG_PAGE鏈接到相同的ACTION_CATEGORY和ACTION_TYPE。
不幸的是,我無法更改數據庫結構(它是遺留代碼)。
我曾嘗試對實體 「UsageLogPage」
@ManyToOne
@JoinTable(name="action",
[email protected](name="ID", referencedColumnName="USER_ACTION_ID"),
[email protected](name="ACTION_CATEGORY_ID", referencedColumnName="ID"))
@Getter @Setter
private ActionCategory actionCategory;
@ManyToOne
@JoinTable(name="action",
[email protected](name="ID", referencedColumnName="USER_ACTION_ID"),
[email protected](name="ACTION_TYPE_ID", referencedColumnName="ID"))
@Getter @Setter
private ActionType actionType;
(我用的龍目島的@Getter和@Setter)
這種映射編譯,但是當我試圖讓下面的Mappping數據,我有以下異常: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:'字段列表'中的未知列'usagelogpa0_.actionCategory'
事實上,Hiberna TE查詢:
select usagelogpa0_.ID as ID1_80_0_,
usagelogpa0_.actionCategory as actionCa2_80_0_,
usagelogpa0_.actionType as actionTy3_80_0_,
usagelogpa0_.URL as URL5_80_0_
from usage_log_page usagelogpa0_
where usagelogpa0_.ID=?
(關鍵部分是「actionCategory」,並在選擇「操作類型」)
這不是我所期望時,Hibernate應該做一個連接。
你知道我做錯了什麼嗎?
謝謝!