2011-08-02 46 views
0

我有一個存在的遺留DDL,我必須映射到JPA。帶外鍵的實體對幻影表和實體的引用

我已經將USERS SQL表映射到USERS JPA實體。

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) 
); 

但是,有些FK存在於我不想在任何JPA類中描述的存在SQL表中。最好的解決辦法是做到以下幾點:

@OneToOne(cascade = CascadeType.MERGE, fetch = FetchType.LAZY) 
@JoinColumn(nullable = false, name = "USAGE_OWNER_ID") 
private Object usageOwners; 

...基本上使用啞/模體對象可能反映任何表引用。但JPA中不允許原始對象類型。

那麼我怎麼能描述&滿足USERS表的外鍵約束而不描述JPA中的任何SQL表。我只想描述FK對這些表的引用,但不描述實際的SQL表

回答

1

您最好擁有聯繫人,語言,TimeZone,UsageOwner類。如果你想擁有類,那麼你可以爲外鍵創建一個@Basic映射,並將其映射爲基本類型,如Integer。