2 imxood imxood 于 2016.02.21 10:00 提问

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个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.29 18:53

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!