条件说明:在用户注册时候,选择role,然后再插入到数据库表中的user和user_role表中。
下面实体配置中的cascade=CascadeType.MERGE,当删除某个user的时候,它同样也会级联的删除与其相关联的表中的数据。而只需要在后台用User user = this.getJpaTemplate().find(User.class, id); this.getJpaTemplate().remove(user);这样就可以轻松的搞定级联删除了。
1.User实体
@Entity
@Table(name = "user")
public class User implements Serializable {
@ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.MERGE)
@JoinTable(name="user_role",
joinColumns=
@JoinColumn(name="user_id", referencedColumnName="ID"),
inverseJoinColumns=
@JoinColumn(name="role_id", referencedColumnName="ID")
)
private Set<Role> roleCollection = new HashSet<Role>();
}
2.Role实体
@Entity
@Table(name = "role")
public class Role implements Serializable {
@ManyToMany(mappedBy="roleCollection")
private Set<User> userCollection;
}
这样设置好实体后,逻辑代码是:
public String signupSubmit(){
role = roleService.getRoleById(roleId);
user.getRoleCollection().add(role);
userService.insert(user);
return "signupSubmit".trim();
}
这样就可以插入到user和user_role表中了。注意这里不用设置中间表的实体了,不管它任何事情。
下面是错误的实体写法(它和中间表有关系了,最好不要这样写)
User实体(不支持的写法)
@Entity
@Table(name = "user")
public class User implements Serializable {
private Set<UserRole> userRoles = new HashSet<UserRole>(0);
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user")
public Set<UserRole> getUserRoles() {
return this.userRoles;
}
public void setUserRoles(Set<UserRole> userRoles) {
this.userRoles = userRoles;
}
}
Role实体:(不支持的写法)
@Entity
@Table(name = "role")
public class Role implements Serializable {
private Set<UserRole> userRoles = new HashSet<UserRole>(0);
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "role")
public Set<UserRole> getUserRoles() {
return this.userRoles;
}
public void setUserRoles(Set<UserRole> userRoles) {
this.userRoles = userRoles;
}
}
UserRole实体:
@Entity
@Table(name = "user_role")
public class UserRole implements java.io.Serializable {
private User user;
private Role role;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id")
public User getUser() {
return this.user;
}
public void setUser(User user) {
this.user = user;
}
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "role_id")
public Role getRole() {
return this.role;
}
public void setRole(Role role) {
this.role = role;
}
}
如果按照上面那种“不支持的写法”写了后,你不妨试下下面的代码或许能插入成功。
role = roleService.getRoleById(roleId);
UserRole userRole = new UserRole();
userRole.setRole(role);
userRole.setUser(user);
Set<UserRole> userRoles = new HashSet<UserRole>();
userRoles.add(userRole);
user.setUserRoles(userRoles);
userService.insert(user);
如果插入成功则证明这样也是可以的,因为我的总是插入不成功(但是我同事的好像这样就可以插入成功,我至今都不知道是什么原因),可以是实体或者数据库或者其他的原因。 我的总报告错误是:During synchronization a new object was found through a relationship that was not marked cascade PERSIST。望高手指点!
分享到:
相关推荐
首先,我们需要为User和Role创建对应的Java实体类,并在每个类中定义一个Set类型的属性,分别表示User的Role集合和Role的User集合。使用`@ManyToMany`注解来声明这个多对多关系。 ```java @Entity public class ...
UserRole userRole = new UserRole(); userRole.setUser(user); userRole.setRole(role); user.getRoles().add(userRole); role.getUsers().add(userRole); entityManager.persist(userRole); ``` 5. **查询**:...
"userRole.rar打的jar包"这个标题暗示我们这里有一个与用户角色管理相关的Java应用程序。RAR通常用于压缩文件,但它不是Java的标准打包格式。可能是开发者先将文件打包成RAR,然后再从RAR中提取内容创建了jar包,以...
dashboard-user-role.yaml
在这个项目"Laravel开发-l5-user-role-and-permission"中,我们将关注如何在Laravel 5中实现用户角色和权限的管理。 首先,让我们理解用户、角色和权限的基本概念。用户是系统中的实际操作者,他们通过登录账户进行...
Pages by User Role for WordPress WordPress用户角色的页面" ---------- 泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、shopify主题、opencart主题、PHP项目源码、安卓项目源码、ios项目源码,...
{ role: "<role>", db: "<database>" } | "<role>", ... ] }) ``` - `user`: 必填参数,指定用户的名称。 - `pwd`: 必填参数,用户的明文密码。MongoDB 3.6 之后,建议使用 `createUser` 的 `pwd` 参数配合 ` ...
在"user-group-role-demo-master"这个项目中,你可以期待找到相关的源代码文件,如配置文件(如Spring Security配置)、实体类(User、Role、Group)、服务接口和服务实现、控制器类以及可能的数据库脚本。...
关于LaravelLaravel是一个具有表达力,优雅语法的Web应用程序框架。 我们认为,发展必须是一种令人愉悦的创造力,才能真正实现。 Laravel通过减轻许多Web项目中使用的常见任务来减轻开发工作的痛苦,例如: 。...
User Role Editor Pro - WordPress Plugin 用户角色编辑器Pro - WordPress插件" ---------- 泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、shopify主题、opencart主题、PHP项目源码、安卓项目...
if ($userRole === UserRole::ADMIN) { // 执行管理员权限的操作 } ``` **五、枚举的额外功能** `laravel-enum` 包还提供了一些额外的方法,如: 1. **转换为字符串**:`$userRole->value` 返回枚举值的字符串。...
例如,你可以使用`auth()->user()->hasRole('admin')`来判断当前登录的用户是否是管理员,或者用`auth()->user()->can('edit_article')`来检查用户是否有编辑文章的权限。 安装和配置`Laravel开发-role`通常涉及到...
<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.... <user username="role1" password="tomcat" roles="role1"/> --> </tomcat-users>
Django用户角色 Django的基于角色的简单用户权限。 django-user-roles是一个简单,可重用的应用程序,可让您创建一组用户角色,该角色可用于控制每种类型的用户... from userroles.models import set_user_role from
- 创建相应的数据库迁移文件,定义`roles`、`permissions`和中间表(如`role_user`和`permission_role`)的结构。 8. **视图和控制器的实现**: - 在视图中,我们可以展示用户所拥有的角色和权限,以及根据角色和...
通常包括`roles`、`permissions`和`role_user`(或`permission_role`)三个表,它们分别存储角色、权限和角色-权限、角色-用户的关系。 6. **Eloquent ORM**:Laravel的Eloquent ORM提供了方便的数据操作接口。我们...
public class UserRole extends Enum { public static const ADMINISTRATOR : UserRole = new UserRole( "ROLE_ADMINISTRATOR" ) ; public static const OPERATOR : UserRole = new UserRole( "ROLE_OPERATOR" ) ; ...
{ role: "<role>", db: "<database>" } | "<role>" ] } ``` - **`user` 字段**:新用户的名字。 - **`pwd` 字段**:用户的密码。需要注意的是,密码是以明文形式存储的,因此建议使用安全的方式管理密码。 - **`...
接下来,我们需要创建两个数据库角色:`admin role` 和 `user role`。角色是一组用户的集合,它们共享某些权限。通过向角色分配权限而不是单独为每个用户分配,可以简化管理过程。创建角色的SQL语句如下: ```sql ...