如何通过外键将mySQL数据库中的一个表连接到多个表?

时间:2019-01-29 18:03:51

标签: java mysql database spring

我有一个用户表,角色表和通知表。 user_id是用于将用户链接到通知的外键。

在我的用户类中,我已经通过其外键role_id访问另一个表,角色。     如图所示

@Data
@Entity
@Table(name = "users")
public class User {`enter code here`

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column
    private Long id;

    @Column
    @NotBlank
    @Size(max = 40)
    private String username;

    // Valid From
    @Column
    private Date validFrom;


    // Valid To
    @Column
    private Date validTo;

    @Column
    @NotBlank
    @Size(max = 100)
    private String password;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinTable(name = "user_roles",
            joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "role_id"))






    private Role role;

    public User() {

    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }


}

如何使用@JoinTable批注连接到通知表? 它不接受重复项。

1 个答案:

答案 0 :(得分:2)

您一定不能使用@JoinTable批注。 @JoinTable批注仅用于@ManyToMany关系。

您需要创建一个具有三个字段的新实体,每个字段必须具有@ManyToOne和@JoinColumn批注。 例如:

@Entity
   @Table(name = "table_name")
   class NewEntity {

    //Id and anothers fields

    @ManyToOne
    @JoinColumn(name = "user_id")
    private Users users;

    @ManyToOne
    @JoinColumn(name = "role_id")
    private Roles roles;

    @ManyToOne
    @JoinColumn(name = "notification_id")
    private Notifications notifications ;

    //getters and setters       
}