【问题标题】:How do i connect one table in a mySQL database to more than one other table via foreign keys?如何通过外键将 mySQL 数据库中的一个表连接到多个其他表?
【发布时间】:2019-01-29 18:03:51
【问题描述】:

我有一个用户表、角色表和一个通知表。 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 注释连接到通知表? 它不接受重复。

【问题讨论】:

    标签: java mysql database spring


    【解决方案1】:

    你不能使用@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       
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-30
      • 2016-02-17
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多