У меня есть следующая существующая схема БД, которую я хотел бы воссоздать с аннотациями Java и обычными JPA (используя hibernate в качестве поставщика, поэтому особые аннотации hibernate будут работать в качестве крайней меры):
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, но, насколько я видел, не использует ее.Однако он использует таблицу, которую я указал для класса Userdata .
Поскольку я довольно новичок в Java и в спящем режиме, все, что я делаю, чтобы проверить это в настоящее время, этоглядя на схему БД, которую hibernate создает при сохранении нескольких образцов записей.
В результате я совершенно озадачен тем, правильно ли я это делаю.Я прочитал документацию по гибернации и довольно много результатов Google, но ни один из них, похоже, не имел отношения к тому, что я хочу сделать (составной ключ с «подклассами» с их собственным первичным ключом).