我正在使用Hibernate创建一个我将在我的Java应用程序中使用的数据库。
我有两个实体:
角色[ ID ,姓名,说明]
UIElement [ ID ,姓名,说明]
他们有很多关系。即角色可以有许多UIElements,UIElement可以设置为多个角色。这两者在下表中相关:
Role_UI [ Role_Id , UI_ID ,属性]
属性是varchar(20)或String,例如,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<>();
这是对的吗?地图中的字符串是数据库中的属性字段吗?
答案 0 :(得分:0)
您应该为ROLE_UI表创建一个单独的实体,并将many-many分成两个一对多关联。表示ROLE_UI表的实体具有附加字段(属性)。
答案 1 :(得分:0)
我认为这是一种解决方法。
您需要创建一个新实体:
Role_UI [Role_Id,UI_ID,property]
@Entity
class Role_UI{
@ManyToOne
Role role;
@ManyToOne
UIElement element;
@Enumeration
Permission property;
}
enum Permission{
CREATE, EDIT, READ;
}