gpt4 book ai didi

java - JPA 1 个关系表,2 个独立子句,使用带有 @OneToMany 的公共(public)类

转载 作者:行者123 更新时间:2023-12-01 15:25:21 26 4
gpt4 key购买 nike

基本上我想对公司和个人实现地址。地址是单独的实体。

公司可以拥有一个使用与个人 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

提前致谢

最佳答案

您不想将特定地址限制为实体类型(个人/公司)。考虑一下(边缘)情况,个体运算符(operator)将其家庭住址作为公司地址。或者将 Multi-Tenancy 单元改造成办公大楼的情况。您明白了要点 - 地址应该是完全独立的实体,系统中的其他实体然后通过关联表引用。

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

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

关于java - JPA 1 个关系表,2 个独立子句,使用带有 @OneToMany 的公共(public)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10244878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com