`

User Role userRole

 
阅读更多

条件说明:在用户注册时候,选择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。望高手指点!

 

分享到:
评论

相关推荐

    hibernate(user-role多对多映射)

    首先,我们需要为User和Role创建对应的Java实体类,并在每个类中定义一个Set类型的属性,分别表示User的Role集合和Role的User集合。使用`@ManyToMany`注解来声明这个多对多关系。 ```java @Entity public class ...

    Hibernate ORM - 多对多双向中间实体关联关系

    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包

    "userRole.rar打的jar包"这个标题暗示我们这里有一个与用户角色管理相关的Java应用程序。RAR通常用于压缩文件,但它不是Java的标准打包格式。可能是开发者先将文件打包成RAR,然后再从RAR中提取内容创建了jar包,以...

    dashboard-user-role.yaml

    dashboard-user-role.yaml

    Laravel开发-l5-user-role-and-permission

    在这个项目"Laravel开发-l5-user-role-and-permission"中,我们将关注如何在Laravel 5中实现用户角色和权限的管理。 首先,让我们理解用户、角色和权限的基本概念。用户是系统中的实际操作者,他们通过登录账户进行...

    【WordPress插件】2022年最新版完整功能demo+插件v1.6.1.98877.zip

    Pages by User Role for WordPress WordPress用户角色的页面" ---------- 泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、shopify主题、opencart主题、PHP项目源码、安卓项目源码、ios项目源码,...

    MongoDb db.createUser用户权限

    { role: "&lt;role&gt;", db: "&lt;database&gt;" } | "&lt;role&gt;", ... ] }) ``` - `user`: 必填参数,指定用户的名称。 - `pwd`: 必填参数,用户的明文密码。MongoDB 3.6 之后,建议使用 `createUser` 的 `pwd` 参数配合 ` ...

    user-group-role-demo:演示如何连接组,角色和用户的演示

    在"user-group-role-demo-master"这个项目中,你可以期待找到相关的源代码文件,如配置文件(如Spring Security配置)、实体类(User、Role、Group)、服务接口和服务实现、控制器类以及可能的数据库脚本。...

    Laravel-user-role:用户角色管理系统laravel

    关于LaravelLaravel是一个具有表达力,优雅语法的Web应用程序框架。 我们认为,发展必须是一种令人愉悦的创造力,才能真正实现。 Laravel通过减轻许多Web项目中使用的常见任务来减轻开发工作的痛苦,例如: 。...

    【WordPress插件】2022年最新版完整功能demo+插件v4.62.zip

    User Role Editor Pro - WordPress Plugin 用户角色编辑器Pro - WordPress插件" ---------- 泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、shopify主题、opencart主题、PHP项目源码、安卓项目...

    Laravel开发-laravel-enum

    if ($userRole === UserRole::ADMIN) { // 执行管理员权限的操作 } ``` **五、枚举的额外功能** `laravel-enum` 包还提供了一些额外的方法,如: 1. **转换为字符串**:`$userRole-&gt;value` 返回枚举值的字符串。...

    Laravel开发-role

    例如,你可以使用`auth()-&gt;user()-&gt;hasRole('admin')`来判断当前登录的用户是否是管理员,或者用`auth()-&gt;user()-&gt;can('edit_article')`来检查用户是否有编辑文章的权限。 安装和配置`Laravel开发-role`通常涉及到...

    tomcat-user

    &lt;!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.... &lt;user username="role1" password="tomcat" roles="role1"/&gt; --&gt; &lt;/tomcat-users&gt;

    django-user-roles:已弃用:Django的基于角色的简单用户权限

    Django用户角色 Django的基于角色的简单用户权限。 django-user-roles是一个简单,可重用的应用程序,可让您创建一组用户角色,该角色可用于控制每种类型的用户... from userroles.models import set_user_role from

    Laravel开发-role-model

    - 创建相应的数据库迁移文件,定义`roles`、`permissions`和中间表(如`role_user`和`permission_role`)的结构。 8. **视图和控制器的实现**: - 在视图中,我们可以展示用户所拥有的角色和权限,以及根据角色和...

    Laravel开发-role-manager

    通常包括`roles`、`permissions`和`role_user`(或`permission_role`)三个表,它们分别存储角色、权限和角色-权限、角色-用户的关系。 6. **Eloquent ORM**:Laravel的Eloquent ORM提供了方便的数据操作接口。我们...

    AStream:用 AS3 编写的 XML 到对象(反之亦然)映射库。 与 XStream 兼容

    public class UserRole extends Enum { public static const ADMINISTRATOR : UserRole = new UserRole( "ROLE_ADMINISTRATOR" ) ; public static const OPERATOR : UserRole = new UserRole( "ROLE_OPERATOR" ) ; ...

    mongodb create user

    { role: "&lt;role&gt;", db: "&lt;database&gt;" } | "&lt;role&gt;" ] } ``` - **`user` 字段**:新用户的名字。 - **`pwd` 字段**:用户的密码。需要注意的是,密码是以明文形式存储的,因此建议使用安全的方式管理密码。 - **`...

    方丹丹22240102.docx

    接下来,我们需要创建两个数据库角色:`admin role` 和 `user role`。角色是一组用户的集合,它们共享某些权限。通过向角色分配权限而不是单独为每个用户分配,可以简化管理过程。创建角色的SQL语句如下: ```sql ...

    2005学生系统

    string sql = string.Format("select * from userInfo where UserloginId='{0}' and UserPass='{1}' and UserRole={2}", txt_UserloginId.Text, txt_UserPass.Text, userRole); SqlCommand com = new SqlCommand...

Global site tag (gtag.js) - Google Analytics