多对一与一对多

时间:2019-12-23 11:47:50

标签: java sql jpa

我有三个实体CusomerProjectPackage。我想添加一个新的实体Role。前三个提到的实体中的每一个都可以扮演多个角色。每个角色只能属于一个customer project package

有什么方法可以确保角色只能属于这三种类型中的一种

我考虑了两种方法:

1)

public class Role {

   // attributes

   @ManyToOne
   private Customer customer;

   @ManyToOne
   private Project project;

   @ManyToOne
   private Package package;
}

我必须确保它们可以为空。因此,我只能设置三个中的一个,而将另一个设置为空。我的业务逻辑必须确保三个集合之一始终为空,其他两个集合为空,因为我认为这不可能在数据库中进行控制。

2)

public class Customer {

  // attributes

  @OneToMany
  private List<Role> roles;
}


public class Project {

  // attributes

  @OneToMany
  private List<Role> roles;
}

public class Package {

  // attributes

  @OneToMany
  private List<Role> roles;
}

那样,我将不必使任何内容为空,但是,我又必须确保在我的业务逻辑中,一个角色仅属于三个实体之一,因为没有办法在数据库中实现它。 / p>

多对一或一对多方法更好吗?还是有更好的解决方案?

0 个答案:

没有答案