我有以下的現有DB模式,我想用Java和原生的JPA註解來重新創建(使用Hibernate作爲供應商,所以冬眠具體說明會工作作爲最後的手段),其中:JPA複合鍵@OneToMany
CREATE TABLE users (
user_id NUMBER NOT NULL -- pk
);
CREATE TABLE userdata_keys (
userdata_key_id NUMBER NOT NULL, -- pk
key VARCHAR2(128) NOT NULL
);
CREATE TABLE users_userdata (
user_id NUMBER NOT NULL, -- fk users.user_id
userdata_key_id NUMBER NOT NULL, -- fk userdata_keys.userdata_key_id
value VARCHAR2(256)
);
我由此產生了以下類和註解:
class User {
@Id
Long id;
@OneToMany
Set<Userdata> userdata;
}
class UserdataKey {
@Id
Long id;
String key;
}
class Userdata {
String value;
@EmbeddedId
UserdataId userdataId;
}
@Embeddable
class UserdataId {
User user;
UserdataKey userdataKey;
}
我離開了COLUMNNAME屬性和這裏的實體的其他屬性。
然而,它並不像預期的那樣工作。 如果我沒有指定一個mappedBy屬性爲user.userdata,hibernate會自動創建一個表USERS_USERS_USERDATA,但據我所見不會使用它。但它確實使用我爲用戶數據類指定的表。
因爲我對Java和hibernate還不太熟悉,所以我現在要做的測試是查看hibernate在持久化幾個樣本條目時創建的數據庫模式。
因此,我完全不知道我是否正確地做到了這一點。我閱讀了hibernate文檔和相當多的Google結果,但他們都沒有處理我想要做的事情(組合鍵與「子類」以及它們自己的主鍵)。
有一個類似的問題:http://stackoverflow.com/questions/31600142/how-to-define-onetomany-in-parent-entity-when-child-has-composite-pk – amphibient