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角色信息呢?如果没有的话,怎么能级联插入角色列呢!

    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?