如何在 spring 引导中表示和查询三实体关系?

How to represent and query from a three entity relationship in spring boot?

我正在开发一个商城系统,用户可以在其中拥有一个或多个商店。如果您创建了一家商店,您将拥有该商店的 ADMIN 角色,否则:您创建了一个帐户,然后您被分配了一家商店作为 MANAGER通过那家商店的 ADMIN。一个用户可以有一个 shop,他们是 admin,但也可以是 manager那家商店的店主分配给您的不同 商店。因此,我提出了三个实体:用户、角色和商店。

用户实体

 @Entity
@Table(name = "us_users")

public class User {

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

@NotBlank
private String uuid;
@Email
private String us_email;
//other fields
//getters/setters
} 

角色实体。

@Entity
@Table(name = "ro_roles")
public class Role {

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

    private String rn_role_name;
//setter getter
}

商店实体。

@Entity
@Table(name = "sh_shops")
public class Shop {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    @NotBlank(message = "Shop name can not be left blank")
    private String sh_name;

    @NotBlank(message = "please provide shop icon")
    private String sh_icon;

    @NotBlank(message = "please fill the shop description")
    private String sh_description;
//other fields.. getters and setters
}

我需要这三个实体之间的关系:类似于 table 具有 userId、shopId、RoleId,用户可以在其中

  1. 登录系统,系统可以判断该用户下的角色和店铺。(使用Spring security GrantedAuthorities)
  2. 显示用户店铺在他的账号下,用户只能操作正确角色的店铺。

请协助解决如何对此用例建模的问题。谢谢

首先,您真的需要角色的灵活性吗?也许拥有一个简单枚举的角色就足够了,至少如果您不打算在运行时创建新角色的话。这将简化数据模型。

其次,这听起来像是用户实体的映射关系:

@Entity
@Table(name = "us_users")
public class User {

    @ManyToMany
    @MapKeyJoinColumn(name = "shop_id")
    @JoinTable(name = "user_shop_role", 
        joinColumns = @JoinColumn(name = "user_id"),
        inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Map<Shop, Role> shopRoles = new HashMap<>();

}

在这里,您使用包含字段 user_idshop_idrole_iduser_shop_role table 创建三向关系,这意味着您d期待。

那么给用户添加一个shop角色就是给这个map添加一个key-value关系:

user.getShopRoles().put(shop, role);

显示商店列表只是遍历地图条目并显示具有相应角色(值)的商店(键)。

由于您使用 Shop 作为键,您需要确保 Shop 实体正确实现了 equalshashCode 方法(基于其 id).