我有兩個類,CalculatedValue和Price。價格有CalculatedValue的地圖。每個CalculableValue實例都有其他字段的名稱,值和一對。JPA SortedMap映射 - 避免兩列與鍵
這裏是我的映射用來描述價格和CV之間的依賴關係:
@OneToMany(
cascade = CascadeType.ALL,
fetch = FetchType.EAGER
)
@JoinColumn(name = "priceId")
private Map<String, CalculatedValue> calculatedValues =
new TreeMap<String, CalculatedValue>();
沒有連接表,只是priceId列映射是指對物價的唯一ID。
這裏是生成的表的樣子:
CREATE TABLE PUBLIC.CALCULATEDVALUE( UNIQUEID BIGINT NOT NULL, KEY VARCHAR(2147483647)NOT NULL, PRICEID BIGINT, VALUE DOUBLE NOT NULL, CALCULATEDVALUES_KEY VARCHAR(2147483647), PRIMARY KEY(UNIQUEID) );
ALTER TABLE PUBLIC.CALCULATEDVALUE 添加外鍵(PRICEID) 參考TEST.PUBLIC.PRICE(UNIQUEID);
一切工作,但我想知道是否可以這樣:
- 避免自動「CALCULATEDVALUES_KEY」欄目創作。我已經將這個值存儲在KEY列中,並且避免重複並以某種方式向JPA提供提示會很好。
- 觸發級聯刪除每個刪除價格的計算值(如果我正在運行SQL刪除語句)
- 這樣的映射工作,以防萬一我將使用日期作爲關鍵?不是針對這個特定的領域,而是針對其他一些領域,這將是有用的。假設相同的OneToMany關係。
提前致謝!
PS。我使用最新版本的EclipseLink & H2作爲數據庫。 PPS。不想將可計算值存儲在數組中,因爲我需要經常在Java中找到它的購買密鑰。
感謝您的回答。 下面是我有它現在描述: 艙位價格: @OneToMany( 級聯= CascadeType.ALL, 取= FetchType.EAGER, 的mappedBy = 「價格」 ) 私人地圖<字符串,CalculatedValue > calculatedValues = new TreeMap(); CalculatedValue類: @ManyToOne(取= FetchType.LAZY) @JoinColumn(name = 「priceId」) 私人價格的價格; –
Val
兩個問題: 1)priceId列已生成,但未自動填充。 有什麼辦法讓它自動填充? 我想我需要一些簡單的OneToMany + JoinColumn從我的第一個例子,不需要手動填充反向引用。 2)我仍然有自動生成的CALCULATEDVALUES_KEY列。 有沒有什麼辦法可以避免並幫助JPA瞭解我已經有一個存儲在KEY列中的密鑰? – Val
試圖使用TreeMap而不是Map,並且eclipselink會生成一個錯誤 - 此映射的屬性類與集合類不匹配。 [類java.util.Hashtable]不能被分配給[類java.util.TreeMap]。試圖找到什麼eclipselink支持,但沒有運氣的信息......不知道如果我想切換到休眠.. – Val