当前位置: 首页 > 知识库问答 >
问题:

JPA 1个关系表,2个独立类使用一个带有@OneTomany的公共类

罗智刚
2023-03-14

基本上,我想影响公司和个人的地址。地址是独立的实体。

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

提前致谢

共有1个答案

艾晋
2023-03-14

您不想将特定地址限制为实体类型(个人/公司)。想想(边缘)情况下,一个自营职业者使用他们的家庭地址作为他们的公司地址。或者将多租户单元转换为办公大楼的情况。您得到了要点-地址应该是完全独立的实体,系统中的其他实体然后通过关联表引用这些实体。

在您的例子中,关联表已经生成,您只需要一些小的重构就可以在代码中使用它们(一种形式)。类似于这样:

@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;
}
 类似资料:
  • 假设你个人的仓库在目录 ~/proj. 我们先克隆一个新的“裸仓库“,并且创建一个标志文件告诉git-daemon这是个公共仓库. $ git clone --bare ~/proj proj.git $ touch proj.git/git-daemon-export-ok 上面的命令创建了一个proj.git目录, 这个目录里有一个“裸git仓库" -- 即只有'.git'目录里的内容,没有

  • 问题内容: 好的,这可能是java中的小问题。我们不能在一个文件中定义两个公共类。但是,在《 SCJP学习指南》一书的示例中,提到了以下示例: 当我将其复制粘贴到netbeans中时,立即引发了编译错误,该公共类A应该在单独的文件中提及。SCJP stdydy指南中的示例真的错误吗?同样在一些模拟测试中,我发现许多问题都具有这种模式,但是在所有选项中都没有提到编译器错误。在这里担心 问题答案: 是

  • 我有三张桌子: 我想从表1中选择COL1,从表2中选择COL5,从表3中选择COL4 它喜欢两个联接表,但是当我使用以下查询时,它不起作用,COL5是空白的。 请帮忙。 PS我复制了之前的一个类似示例,但输出不同。

  • 我有一个情况,几个表(TableA 当我使用hibernate逆向工程从这个数据库生成JPA实体时,它会在TableA和TableB for TableC中创建多对一关系。通常要创建一对一的关系,我将TableA主键作为TableC的主键,但由于我有其他表(TableB)也与TableC具有一对一的关系,我不能这样做。因此我不得不在TableA和TableB中使用TableC的外键(这导致了JPA

  • 我正在创建一个测验,并创建了一个具有JFrame的类,它的作用类似于主菜单。在这个菜单上,我创建了一个JButton,我想打开单独的JDialog(其中包含问题等)。 JDialog是一个名为QuestionDialog.java独立类 这里是我在主菜单JFrame类中的代码,特别是我要打开新JDialog public static void main(String[]args){SwingUt

  • 我有一出戏!使用ebean进行模型管理的框架项目。我有4个模型,A B C D. A和B是oneTo多,B和C是OneTo多,B和D是One To多。现在我想要一个与所有相关的B C D链接的A列表。 我现在拥有的是 但是性能非常差,根据sql日志,sql查询没有按照我的要求进行连接。是否有任何方法可以对所有这些对象使用查询联接?(即,选择包含4个查询的所有A B C D,并在本地连接它们,而不是