繁体   English   中英

如何在 Hibernate/JPA 中的两个表之间创建中间表?

[英]How to create intermediate table between two tables in Hibernate/JPA?

表 1:计算机表

 @Entity
 @Table ("computer")
 public class Computer{
   private int id;
   .
 }

表 2:许可证表:

 @Entity
 @Table ("licenses")
 public class Licnese{
   private int id;
   .
 }

表 3:待创建。 这是中级,应该只有两个字段

计算机 ID | 许可证编号

许可证 ID 可以链接到多个计算机 ID,多个计算机 ID 可以有多个许可证。

CompID | LicneseID  
      1|2
      1|2
      2|2

在我们的例子中,计算机和许可证数据已经存在。 我们运行一个作业来填充中间表,即选择计算机 id,从休息服务下载 lincense id,在现有数据库中查找许可证并在中间表中创建记录。

应该怎么做?

  1. 独立插入或

    中间类{ private int compid private int liceid }

但是在这个主键中需要哪个客户不想要。

  1. 如果是,则使用计算机或许可证实体更新,然后如何?

我知道我们需要在计算机实体中使用 ElementCollection 但如何引用许可证 ID?

@ElementCollection(targetClass = Intermediate.class)
    @CollectionTable(name = "Intermediate", joinColumns = @JoinColumn(name = "ID"))
    @AttributeOverrides({
        @AttributeOverride(name = "license ID",column = @Column(name = "License ID")),
    private List<Intermediate> intermediate;

在这种情况下我们还需要合并计算机实体吗?

根据您要使用 Hibernate 连接表方法的描述。 如何实现连接表方法你可以参考下面提到的链接: http : //fruzenshtein.com/hibernate-join-table-intermediary/

您可以简单地定义一个@ManyToMany关系,并且会自动创建 joininig 表。

@ManyToMany
@JoinTable(
  name = "licence_computer", 
  joinColumns = @JoinColumn(name = "computer_id"), 
  inverseJoinColumns = @JoinColumn(name = "licence_id"))
private Set<Licnese> licences;

暂无
暂无

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

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