Hibernate映射 - 数据库中的三层关系

时间:2016-05-06 06:46:41

标签: oracle hibernate relational-database hibernate-mapping

我的数据库设计中有以下关系:如何通过hibernate映射实现它?

我有一个客户端表。每个客户都可以拥有多个“设施”以及多个证券 此外,每个工厂都可以被多种证券所覆盖。

例如,

  

客户c1:设施F1 F2 F3
  客户端c1:具有安全性S1 S2 S3

     

对于这个特定的客户c1:
  安全S1涵盖设施F1
  安全S2涵盖设施F2
  安全S3涵盖设施F1,F2,F3

所以我们可以进行客户端设施映射

  

c1 - F1
  c1 - F2
  c1 - F3

和客户端安全性映射

  

c1 - S1
  c1 - S2
  c1 - S3

我们需要客户端设施安全映射吗?

  

C1-F1-S1
  C1-F2-S2
  C1-F1-S3
  C1-F2-S3
  c1-F3-S3

有没有更好的方法呢? 另外我如何在hibernate映射中处理这个?

我可以为客户端设施客户端安全提供多对多的映射 但是如何使用hibernate映射在 client-facility-security 表中填充数据?或给定要求的任何其他解决方案? 我可以只有一个表 client-facility-security 并避免休息两个表吗?

1 个答案:

答案 0 :(得分:0)

您可以使用@OneToMany()和@ManyToOne()..要将Facility连接到多个证券,您可以使用@OneToMany注释Facility的主键,就像在Client类中完成它一样

public class Client {

     @Column(name="CLIENT_ID")
 private int id;

 @OneToMany(mappedBy="facilityReference", fetch = FetchType.EAGER)
  List<Facilities> facility = new ArrayList<>();


 @OneToMany(mappedBy="securityReference", fetch = FetchType.EAGER)
  List<Security> security = new ArrayList<>();
      ... Getters and Setters
}


public class Facility {

    private String CLIENT_ID; 
    @ManyToOne
    @JoinColumn(name="CLIENT_ID")
    private Client facilityReference;
}      

public class Security {

      private String CLIENT_ID; 
      @ManyToOne
      @JoinColumn(name="CLIENT_ID")
      private Client securityReference;}