用于将数据插入表中的java ManytoMany关系
认证。爪哇
@Entity
public class Authentication {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="authenticationId")
long authenticationId;
@Column(name="username")
String username;
@Column(name="password")
String password;
@Column(name="confirmPassword")
String confirmPassword;
@Column(name="ENABLED")
int enabled;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "userrole",joinColumns = {
@JoinColumn(name = "authenticationId", nullable = false, updatable = false)}, inverseJoinColumns = { @JoinColumn(name = "roleId", nullable = false, updatable = false) })
Set<Role> roleSetInAuthentication = new HashSet<Role>();
角色。爪哇
@Entity
public class Role {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="roleId")
long roleId;
@Column(name="roleName")
String roleName;
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "roleSetInAuthentication")
Set<Authentication> authenticationSetInRole = new HashSet<Authentication>();
管理员控制器。爪哇
@RequestMapping(value = "/admin", method = RequestMethod.GET)
public String displayForm(HttpServletRequest request) {
List<Role> roleList = adminService.getRoleCategory();
request.getSession().setAttribute("roleList", roleList);
return "admin";
}
管理员。jsp
<form:select path="">
Assign Role<option value="SELECT">--SELECT--</option>
<c:forEach var="r" items="${roleList}">
<option value="${r.roleId}">${r.roleName}</option>
</c:forEach>
</form:select>
我使用的是SpringMVC表单,创建了许多关系,因为其中生成了一个单独的表(userrole),字段为authenticationId,roleId。我是否需要手动在(roleuser)表中插入数据,但我想我正在创建许多关系,因此数据应该自动插入到这个表中,但在jsp中如何编写代码并利用关系,以便数据应该自己插入到这个表中,而我不需要手动输入。我只是想试试。我没有完全明白
# 1 楼答案
第三个表称为链接表。n:m关系每个身份验证都有多个角色,反之亦然
因此,在对象级别,身份验证具有角色集合,角色具有身份验证集合
插入表时,ORM首先将数据插入到角色和身份验证中。角色Id和身份验证Id将插入到链接表中
从身份验证中删除一个角色时,只需删除链接表条目,反之亦然
在检索角色时,它将从链接表的引用中获取身份验证,反之亦然
它完全自动,无需手动强>