如何使用javax.prersistence(JPA)注释对数据库实施表约束?

时间:2019-02-27 23:14:30

标签: java jpa model

我有4件东西可以连接和存储,但是我不确定如何使用注释来强制约束。所以这是场景:

我有一个项目,经理,参与者和角色。这是四个实体,也可以是三个,因为经理也是参与者。该角色具有不同的角色,例如经理,参与者,pointOfContact,项目负责人等。我不确定是否需要一个角色,但是是的,有多个角色。

现在是约束:

1)项目只能支持具有所有者角色的SINGLE人。

2)只有现有所有者或PowerUser,Admin可以更改项目的所有者。

3)将所有权从用户X转移到用户Y会自动将用户X添加为参与者。

4)可以将任意数量的参与者添加到项目中。

5)一个或多个角色可以与一个人相关联。

我不确定如何使用JPA设计它。我已经尝试过了:

@Entity
@Table(name = "PROJECT")
public final class PROJECT {
/**
 * The Serialization id.
 */
private static final long serialVersionUID = 1L;

@ManyToOne(cascade = CascadeType.PERSIST)
@JoinTable(name = "OWNER_PROJECT_REL",
        joinColumns = @JoinColumn(name = "PROJECT_ID"),
        inverseJoinColumns = @JoinColumn(name = "OWNER_ID")
)
private SomeDTO owner;

    @ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(name = "PARTICIPANT_PROJECT_REL",
        joinColumns = @JoinColumn(name = "PROJECT_ID"),
        inverseJoinColumns = @JoinColumn(name = "PARTICIPANT_ID")
)
private List<Participant> participants = new ArrayList<>();

但是,这里我将所有者和参与者设为两个不同的Java类。我不确定这是不是一个好的设计。

我应该只参加一个参与者课程,并将所有者视为参与者吗?

哪里适合角色表?

考虑到空间不是问题,我应该使用多少张表?

由于我还很陌生,如何用JPA编写该东西?

谢谢!

0 个答案:

没有答案