2012-04-20 67 views
0

基本上我想阻止公司和個人的地址。地址是獨立的實體。JPA 1關係表,2個與@OneToMany共同使用的獨立類

,公司可以有它使用相同的地址實體作爲Indivuduals AddressContext

AddressContext的AddressContext給出瞭解決與意義的個人,如「我的家庭住址」

Java類:

public class Address { 
} 

public class AddressContext { 
    private Address address; 
    private String name; 
} 

public class Individual { 
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    private Set<AddressContext> addresseContexts; 
} 

public class Company { 
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    private Set<AddressContext> addresseContexts; 
} 

所需的數據庫address_context數據庫表

CREATE TABLE `address_Context` (
    `ID` bigint(20) NOT NULL AUTO_INCREMENT, 
    'address_id bigint(20) NOT NULL, 
    'RELATED_ITEM_ID bigint(20) NOT NULL, 
    'RELATED_ITEM_TYPE varchar(50) NOT NULL, 
    'NAME' varchar(5) 
); 

主要具有以下

1, 1, 1, Individual, 'John's House'; 
2, 2, 1, Company, 'Depoy'; 

什麼是實際發生的是,單獨的表正在創建

companies_address_contexts 
individuals_address_contexts 

是上述可能嗎?我不想繼承AddressContext要麼

在此先感謝

回答

1

你不希望限制特定地址的實體類型(個人/公司)。想一想自僱人士將其家庭地址作爲其公司地址的情況。或者多租戶單位變成辦公樓的情況。你得到的要點 - 地址應該是完全獨立的實體,系統中的其他實體然後通過關聯表來引用。

在你的情況下,無論如何都會生成關聯表,你只需要在你的代碼中進行一些小的重構來使用它們(的一種形式)。就像這樣:

@Entity 
public class Address { 
    // address fields etc 
} 

@Entity 
public class Individual { 
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    @JoinTable(name = "individual_addresses", 
     joinColumns = { @JoinColumn(name = "individual_id", unique = true) }, 
     inverseJoinColumns = { @JoinColumn(name = "address_id") }) 
    private Set<Address> addresses; 
} 

@Entity 
public class Company { 
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    @JoinTable(name = "company_addresses", 
     joinColumns = { @JoinColumn(name = "company_id", unique = true) }, 
     inverseJoinColumns = { @JoinColumn(name = "address_id") }) 
    private Set<Address> addresses; 
} 
+0

對不起,我應該給一個更完整的例子。我的地址實際上是獨一無二的,並且通過AddressContext與公司/個人相關聯。我已更新了我的初始帖子 – kabal 2012-04-20 13:34:36