将数据库关系信息添加到 Java 数据库中的映射?

Adding database relational information to map in Java database?

我正在使用 Hibernate 创建一个数据库,我将在我的 Java 应用程序中使用它。

我有两个实体:

角色[ID、姓名、描述]

UIElement[ID, 名称, 描述]

它们之间存在多对多关系。即一个角色可以有多个 UIElement,一个 UIElement 可以设置为多个角色。两者的关系如下table:

Role_UI[Role_Id, UI_ID, 属性]

属性 是 varchar(20) 或字符串,例如 Read/Create/Edit

在我的 java 应用程序中(在角色对象中,因为完全所有权)我有如下多对多设置:

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "role_ui",
        joinColumns = { @JoinColumn(name = "role_id", nullable = false, updatable = false) },
        inverseJoinColumns = { @JoinColumn(name = "ui_id", nullable = false, updatable = false) }
)
private Map<UIElement, String> uiElements = new HashMap<>();

这是正确的吗?地图中的字符串是否是数据库中的 属性 字段?

您应该为 ROLE_UI table 创建一个单独的实体,并将多对多关联拆分为两个一对多关联。表示 ROLE_UI table 的实体具有附加字段 (属性).

Java Persistence/ManyToMany

我认为这是解决方法。

您需要创建一个新实体:

Role_UI[Role_Id, UI_ID, 属性]

@Entity
class Role_UI{

   @ManyToOne
   Role role;
   @ManyToOne
   UIElement element;
   @Enumeration
   Permission property;
}


enum Permission{
   CREATE, EDIT, READ;
}