imxood 2016-02-21 02:00 采纳率: 0%
浏览 1422

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是有值的, 红圈的地方肯定不对,请教大家看看,如何使有值?~~

  • 写回答

1条回答

  • 毕小宝 博客专家认证 2016-02-29 10:53
    关注

    你的操作代码中,创建了Permission对象后,怎么没有设置这个对象的Role角色信息呢?如果没有的话,怎么能级联插入角色列呢!

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题