我有一个现有的传统DDL,我要映射到JPA。
我已经将USERS SQL表映射到USERS JPA @Entity。
create table USERS (
-- a bunch of fields
primary key (id),
foreign key FK_USERS_CONTACT (CONTACT_ID) references CONTACTS(ID),
foreign key USER_SPEAKS_NATIVE_LANGUAGE (NATIVE_LANGUAGE) references LANGUAGES(ID),
foreign key USER_HAS_PREFERRED_TIMEZONE (PREF_TIMEZONE_ID) references TIME_ZONES(ID),
foreign key USER_OWNS_USAGE (USAGE_OWNER_ID) references USAGE_OWNERS(ID)
);
但是现有的SQL表中存在那些我不想在任何JPA类中描述的FK。最好的解决方案是执行以下操作:
@OneToOne(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
@JoinColumn(nullable = false, name = "USAGE_OWNER_ID")
private Object usageOwners;
...基本上使用可以反映任何表引用的虚拟/幻像对象。但JPA中不允许使用原始对象类型。
那么我如何描绘&实现USERS表的外键约束而不描述JPA中的任何SQL表。我只想描述对这些表的FK引用,而不是实际的SQL表。
答案 0 :(得分:1)
您最好使用Contact,Language,TimeZone,UsageOwner类。如果你想要有类,那么你可以只为外键设置@Basic映射,并将其映射为基本类型,如Integer。