问题描述
- Hibername多表关系映射出现问题,请教大家
-
问题: 权限表中的role_id保存结果为null, 下面是详细描述:涉及三个实体类:
/** * 权限表 * @author Imxood * 2016年2月21日 */ @Entity @Table(name = "t_permission") public class Permission implements Serializable { private static final long serialVersionUID = 2718494404287816693L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String name; @ManyToOne @JoinColumn(name = "role_id") private Role role; public Permission() { } //getter,setter... } /** * 角色表 * @author Imxood * 2016年2月21日 */ @Entity @Table(name = "t_role") public class Role implements Serializable { private static final long serialVersionUID = 7042556500854817893L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String name; @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinTable(name = "t_user_role", joinColumns = { @JoinColumn(name = "role_id") }, inverseJoinColumns = { @JoinColumn(name = "user_id") }) private List<User> user; @OneToMany(mappedBy = "role", // 指定了由多的那一方来维护关联关系,mappedBy指的是多的一方对1的这一方的依赖的属性,如果没有指定由谁来维护关联关系,则系统会给我们创建一张中间表 fetch = FetchType.EAGER, cascade = CascadeType.ALL) private List<Permission> permissions; public Role() { } //getter,setter... } /** * 用户表 * @author Imxood * 2016年2月21日 */ @Entity @Table(name = "t_user") public class User implements Serializable { private static final long serialVersionUID = -7154917770769302643L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String username; private String password; @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)// mappedBy指定了由多的那一方来维护关联关系即外键建在多方,如果没有指定由谁来维护关联关系,则系统会给我们创建一张中间表 @JoinTable(name = "t_user_role", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "role_id") }) private List<Role> roles; public User() { } //getter,setter... }
我的操作是这样的:
//数据初始化, 添加两条用户 //用户1: List<Permission> permissions = new ArrayList<> (); permissions.add(new Permission("user:*")); Role role = new Role("admin", permissions); List<Role> roles = new ArrayList<> (); roles.add(role); User user = new User("imx", "imx", roles); user = userServer.save(user); //用户2: permissions = new ArrayList<> (); permissions.add(new Permission("student:*")); role = new Role("admin", permissions); roles = new ArrayList<> (); roles.add(role); user = new User("imxood", "imxood", roles); user = userServer.save(user);
运行的结果是:
预期的效果是role_id是有值的, 红圈的地方肯定不对,请教大家看看,如何使有值?~~
解决方案
你的操作代码中,创建了Permission对象后,怎么没有设置这个对象的Role角色信息呢?如果没有的话,怎么能级联插入角色列呢!
时间: 2024-09-19 08:16:36