繁体   English   中英

JPA 1关系表,使用带有@OneToMany的通用类的2个独立类

[英]JPA 1 relationship table, 2 independant classes using a common class with @OneToMany

基本上,我想将地址强加给公司和个人。 地址是单独的实体。

公司可以具有一个AddressContext,它使用与Indivuduals AddressContext相同的Address实体

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

提前致谢

您不想将特定地址限制为实体类型(个人/公司)。 考虑一下(个体经营)个体经营者使用其家庭住址作为公司地址的情况。 或者将多租户单位转换为办公大楼的情况。 您将获得要点地址,它们应该是系统中其他实体然后通过关联表引用的完全独立的实体。

在您的情况下,无论如何都生成了关联表,您只需要进行一些小的重构即可在代码中使用它们(的一种形式)。 像这样:

@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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM