hibernate-Hibername多表关系映射出现问题,请教大家

问题描述

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

hibernate-Hibername多表关系映射出现问题,请教大家的相关文章

急:SSH+Oracle||用hibernate进行多对多关系映射 出错 违反唯一性约束 奇怪

问题描述 Oracle 9i,使用hibernate,多对多的关系映射,级联操作的时候,出错了.我的数据库中表的主键是采用自增长的方式,序列+触发器进行的自增长.实体类与表的映射文件,如下<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.s

Hibernate及JPA 对象关系映射的简单映射策略

简单映射 近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场 热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 Toplink.Sun 公司在充分吸收现有的优秀 ORM 尤其是 Hibernate 框架设计思想的基础上,制定了新的 JPA(Java Persistence API)规范,对现在乱象丛生的持久 化市场带来一个标准,大有统一持久化市场的气势.JPA 是通过 JDK5.0 注解或 XML

Hibernate的核心对象关系映射

Hibernate的核心就是对象关系映射: 加载映射文件的两种方式: 第一种:<mapping resource="com/bie/lesson02/crud/po/employee.hbm.xml"/> 第二种://便于测试,会自动加载映射文件:employee.hbm.xml   private static SessionFactory sf;     static{         //加载主配置文件,并且创建session工厂       sf = new Con

Hibernate及JPA对象关系映射:关联关系映射策略

关联关系映射 关联关系映射,是映射关系中比较复杂的一种映射关系,总的说来有一对一.一对多和多对多几种 关系.细分起来他们又有单向和双向之分.下面我们逐一介绍一下. 单向 OneToOne 单向一对一是关联关系 映射中最简单的一种,简单地说就是可以从关联的一方去查询另一方,却不能反向查询.我们用下面的例子来举例说明,清 单 1 中的 Person 实体类和清单 2 中的 Address 类就是这种单向的一对一关系,我们可以查询一个 Person 的对应的 Address 的内容,但是我们却不能由一

【HIBERNATE框架开发之六】HIBERNATE中ANNOTATION的关系映射&amp;&amp;组件映射!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/821.html 准备工作,新建两个实体类如下: Husband.class: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 package com.himi;   import ja

使用Hibernate进行对象的关系映射

Hibernate是业界比较推崇的ORM(o/r mapping),目前的版本已经非常稳定和成熟,而且的他的文档也极其丰富. Http://www.jdon.com和http://www.chinaxp.com 这两个技术网站对hibernate的讨论很多也很精到. 这篇文章是一篇让出学者入门的文章.现意译如下,英文好的可以跳过直接阅读原文. --译者按 在Java技术中有许多方法可以对数据进行持久化,持久层也是Java应用程序中最重要的部分之一.在当今关系型数据库仍为如主流数据库的时候,我个人

Hibernate中表与表之间的级联关系

问题描述 Hibernate中表与表之间的级联关系 2C 投票系统1. # 需求: 用户可以创建投票也可以_参与投票2.数据库结构如下 1.感觉VOTER表应该是 多对多 的中间表2.VOTE表与USERS表之间存在明显的多对一关系但是结合 VOTE与VOTER和USERS三者来看 又好像 VOTE表与USERS表之间存在明显的多对多关系 此时的表间关系 VOTE表与USERS表之间 好像是存在 多对一 又存在 多对多 这样合理吗? 解决方案 1:多对1的关系?????? 例如部门Departm

Hibernate 动态表名映射(数据库分表) NamingStrategy

NamingStrategy接口很有意思,可以作为业务类规范和数据库表规范的桥梁,例如一个数据对象User,对应数据库表是 T_USER,如果所有映射关系都是这样的情况,可以使用NamingStrategy做为一个桥梁衔接,当然你也可以在hbx.xml配置文件中指定 class对应的table.   hibernate.cfg.xml代码就省略了...   User.hbx.xml代码 <hibernate-mapping>     <class name="User"

【HIBERNATE框架开发之七】HIBERNATE使用ANNOTATION中各种关系映射的CRUD(增删改查)&amp;&amp;集合映射&amp;&amp;继承映射

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/822.html       首先对于Annotation中CRUD的C(Create)操作:-------- 假设 :   User (MonyToOne)       Group OK,那么有如下 Junit Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Conf