精华内容
下载资源
问答
  • Mysql多对关系利用中间表查询

    万次阅读 2019-05-25 17:24:17
    1、多对关系,我们举个简单的例子,一个顾客可以买多件商品,同时一类商品(指多件相同的商品)也可以也可以让多个用户购买 下面是对应的,用户,商品以及关系表,其中关系表中userId、metId的外键分别是...

    1、多对多关系,我们举个简单的例子,一个顾客可以买多件商品,同时一类商品(指多件相同的商品)也可以也可以让多个用户购买

    下面是对应的表,用户表,商品表以及关系表,其中关系表中userId、metId的外键分别是userTable 的userId 、materialTable 的matId

            userTable                                                      materialTable                                       

     

                                   

       materil_user 

     

    如果我们要查询用户a1买了哪些商品我们可以这样

    SELECT user.userName,user.userId,mat.matName,mat.matId FROM materil_user mu LEFT JOIN userTable user on 
    user.userId=mu.userId LEFT JOIN materialTable mat on mat.matId=mu.matId WHERE mu.userId=1

     查询结果:

    展开全文
  • Hibernate多对关系中间表有其他属性的配置方式 一、需求原因 在我做系统架构时遇到情况是这样:资源菜单实体类(Resource)和角色实体类(Role)是多对多关系,需要各个角色可以个性化自己的资源菜单顺序。 二、...
    
    

    Hibernate多对多关系中间表有其他属性的配置方式

    一、需求原因

    在我做系统架构时遇到情况是这样:资源菜单实体类(Resource)和角色实体类(Role)是多对多关系,需要各个角色可以个性化自己的资源菜单顺序。

    二、设计理念

    多对多的关系拆分为两个一对多(以下为关系映射图)


    三、具体配置

    方式一:XML方式

    Role实体

    public class Role implements Serializable {

             /*ID*/

             private Long id;

             /*名称*/

             private String name;

             /*与RoleResource的一对多关系*/

             Private Set<RoleResource> roleResources= new HashSet<RoleResource>();

             //get set

    }

    Resource实体

    public class Resource implements Serializable {

             /*ID*/

             private Long id;

             /*名称*/

             private String name;

             /*与RoleResource的一对多关系*/

             private Set<RoleResource> roleResources = new HashSet<RoleResource>();

             // getset

    }

    RoleResource辅助实体

    public class RoleResource implements Serializable{

             /*ID*/

             private Long id;

             /*与Role的多对一关系*/

             private Role role;

             /*与Resource的多对一关系*/

             private Resource resource;

             /*排序字段*/

             private Integer sort;

             // getset

    }

    Role.hbm.xml

    <hibernate-mappingpackage="com.glw.domain">

             <class name="Role" table="glw_role">

                       <id name="id" column="id">

                                <generator class="native" />

                       </id>

                       <property name="name" type="string" not-null="true"unique="true" length="50"/>

                       <!--roleResource,与RoleResource的一对多关系-->

                       <set name="roleResources" order-by="id ASC"inverse="true" lazy="false">

                                <key column="roleId"/>

                                <one-to-many class="RoleResource" />

                       </set>

             </class>

    </hibernate-mapping>

    Resource.hbm.xml

    <hibernate-mappingpackage="com.glw.domain">

             <class name="Resource" table="glw_resource">

                       <id name="id" column="id">

                                <generator class="native" />

                       </id>

                       <property name="name" type="string" not-null="true"length="50"/>

                       <!--roleResources,与RoleResource的一对多关系-->

                       <set name="roleResources" order-by="id ASC"inverse="true" lazy="false">

                                <key column="resourceId"/>

                                <one-to-many class="RoleResource"/>

                       </set>

             </class>

    </hibernate-mapping>

    RoleResource.hbm.xml

    <hibernate-mappingpackage="com.glw.domain">

             <class name="RoleResource" table="glw_role_resource">

                       <id name="id" column="id">

                                <generator class="native" />

                       </id>

                       <property name="sort" type="integer" not-null="true" />

                       <!--role,与Role的多对一关系-->

                       <many-to-one name="role" class="Role" column="roleId" />

                       <!--resource,与Resource的多对一关系-->

                       <many-to-one name="resource" class="Resource"column="resourceId"/>

             </class>

    </hibernate-mapping>

    Hibernate.cfg.xml中配置

    <mapping resource="com/glw/domain/Role.hbm.xml"/>

    <mapping resource="com/glw/domain/Resource.hbm.xml" />

    <mapping resource="com/glw/domain/RoleResource.hbm.xml" />

    方式二:Annotation方式

    Role实体

    @Entity

    @Table(name="glw_role")

    public class Role {

             @Id

             @GeneratedValue(strategy=GenerationType.TABLE)

             private Long id;

             @Column(length=50)

             private String name;

             @OneToMany(mappedBy="role",cascade=CascadeType.ALL)

             private Set<RoleResource> roleResources = new HashSet<RoleResource>();

             //get set

    }

    Resource实体

    @Entity

    @Table(name="glw_resource")

    public class Resource {

             @Id

             @GeneratedValue(strategy=GenerationType.TABLE)

             private Long id;

             @Column(length=50)

             private String name;

             @OneToMany(mappedBy="resource",cascade=CascadeType.ALL)

             private Set<RoleResource> roleResources = new HashSet<RoleResource>();

             // getset

    }

    RoleResource辅助实体

    @Entity

    @Table(name="glw_role_resource")

    public class RoleResource {

             @Id

             @GeneratedValue(strategy=GenerationType.TABLE)

             private Long id;

             @Column

             private Integer sort;

             @ManyToOne(cascade=CascadeType.ALL)

             @JoinColumn(name="roleId",nullable=true)

             private Role role;

             @ManyToOne(cascade=CascadeType.ALL)

             @JoinColumn(name="resourceId",nullable=true)

             private Resource resource;

             // getset

    }

    Hibernate.cfg.xml中配置

    <mapping class="com.glw.domain.Role"/>

    <mapping class="com.glw.domain.Resource"/>

    <mapping class="com.glw.domain.RoleResource"/>

    四、完毕

    Xml和Annotation方式可任意选取一种,以上本人均测试通过。欢迎发邮件到linwu_gao@163.com探讨。


    展开全文
  • Hibernate多对关系中间表有其他属性的配置方式 一、需求原因  在我做系统架构时遇到情况是这样:资源菜单实体类(Resource)和角色实体类(Role)是多对多关系,需要各个角色可以个性化自己的资源菜单顺序。 二、...

    Hibernate多对多关系中间表有其他属性的配置方式

    一、需求原因

            在我做系统架构时遇到情况是这样:资源菜单实体类(Resource)和角色实体类(Role)是多对多关系,需要各个角色可以个性化自己的资源菜单顺序。

    二、设计理念

    多对多的关系拆分为两个一对多(以下为关系映射图)


    三、具体配置

    方式一:XML方式

    Role实体

    public class Role implements Serializable {

             /*ID*/

             private Long id;

             /*名称*/

             private String name;

             /*与RoleResource的一对多关系*/

             Private Set<RoleResource> roleResources= new HashSet<RoleResource>();

             //get set

    }

    Resource实体

    public class Resource implements Serializable {

             /*ID*/

             private Long id;

             /*名称*/

             private String name;

             /*与RoleResource的一对多关系*/

             private Set<RoleResource> roleResources = new HashSet<RoleResource>();

             // getset

    }

    RoleResource辅助实体

    public class RoleResource implements Serializable{

             /*ID*/

             private Long id;

             /*与Role的多对一关系*/

             private Role role;

             /*与Resource的多对一关系*/

             private Resource resource;

             /*排序字段*/

             private Integer sort;

             // getset

    }

    Role.hbm.xml

    <hibernate-mappingpackage="com.glw.domain">

             <class name="Role" table="glw_role">

                       <id name="id" column="id">

                                <generator class="native" />

                       </id>

                       <property name="name" type="string" not-null="true"unique="true" length="50"/>

                       <!--roleResource,与RoleResource的一对多关系-->

                       <set name="roleResources" order-by="id ASC"inverse="true" lazy="false">

                                <key column="roleId"/>

                                <one-to-many class="RoleResource" />

                       </set>

             </class>

    </hibernate-mapping>

    Resource.hbm.xml

    <hibernate-mappingpackage="com.glw.domain">

             <class name="Resource" table="glw_resource">

                       <id name="id" column="id">

                                <generator class="native" />

                       </id>

                       <property name="name" type="string" not-null="true"length="50"/>

                       <!--roleResources,与RoleResource的一对多关系-->

                       <set name="roleResources" order-by="id ASC"inverse="true" lazy="false">

                                <key column="resourceId"/>

                                <one-to-many class="RoleResource"/>

                       </set>

             </class>

    </hibernate-mapping>

    RoleResource.hbm.xml

    <hibernate-mappingpackage="com.glw.domain">

             <class name="RoleResource" table="glw_role_resource">

                       <id name="id" column="id">

                                <generator class="native" />

                       </id>

                       <property name="sort" type="integer" not-null="true" />

                       <!--role,与Role的多对一关系-->

                       <many-to-one name="role" class="Role" column="roleId" />

                       <!--resource,与Resource的多对一关系-->

                       <many-to-one name="resource" class="Resource"column="resourceId"/>

             </class>

    </hibernate-mapping>

    Hibernate.cfg.xml中配置

    <mapping resource="com/glw/domain/Role.hbm.xml"/>

    <mapping resource="com/glw/domain/Resource.hbm.xml" />

    <mapping resource="com/glw/domain/RoleResource.hbm.xml" />

    方式二:Annotation方式

    Role实体

    @Entity

    @Table(name="glw_role")

    public class Role {

             @Id

             @GeneratedValue(strategy=GenerationType.TABLE)

             private Long id;

             @Column(length=50)

             private String name;

             @OneToMany(mappedBy="role",cascade=CascadeType.ALL)

             private Set<RoleResource> roleResources = new HashSet<RoleResource>();

             //get set

    }

    Resource实体

    @Entity

    @Table(name="glw_resource")

    public class Resource {

             @Id

             @GeneratedValue(strategy=GenerationType.TABLE)

             private Long id;

             @Column(length=50)

             private String name;

             @OneToMany(mappedBy="resource",cascade=CascadeType.ALL)

             private Set<RoleResource> roleResources = new HashSet<RoleResource>();

             // getset

    }

    RoleResource辅助实体

    @Entity

    @Table(name="glw_role_resource")

    public class RoleResource {

             @Id

             @GeneratedValue(strategy=GenerationType.TABLE)

             private Long id;

             @Column

             private Integer sort;

             @ManyToOne(cascade=CascadeType.ALL)

             @JoinColumn(name="roleId",nullable=true)

             private Role role;

             @ManyToOne(cascade=CascadeType.ALL)

             @JoinColumn(name="resourceId",nullable=true)

             private Resource resource;

             // getset

    }

    Hibernate.cfg.xml中配置

    <mapping class="com.glw.domain.Role"/>

    <mapping class="com.glw.domain.Resource"/>

    <mapping class="com.glw.domain.RoleResource"/>

    四、完毕

    Xml和Annotation方式可任意选取一种,以上本人均测试通过。

    展开全文
  • 前两种关系只需要表本身就能表达清楚,然而多对多需要第三张中间表才能表达清楚多对多的关系中间表在一般情况下是由三个字段组成: 1、中间表本身的自增主键 2、两张表各自的主键。 这时候命名就成为了一个...

    在关系型数据库中,除了有一对一,一对多外,还有多对多的关系。前两种关系只需要表本身就能表达清楚,然而多对多需要第三张中间表才能表达清楚多对多的关系。

    中间表在一般情况下是由三个字段组成:

                    1、中间表本身的自增主键

                    2、两张表各自的主键。

             这时候命名就成为了一个问题,而采用双下划线就能解决这个问题。

    比如:角色组表(group)和菜单表(rule),一个角色可以有多个菜单,一个菜单也可以多个角色。那么他们的中间表就是group__rule

    展开全文
  • jpa配置多对关系(中间表)

    万次阅读 2018-04-03 10:24:54
    现在我们再tb_user或者tb_role中任意一个里面进行维护关系多对对的情况下我们需要创建一个中间表来完成这个关系的映射,我们再tb_user中添加注解@ManyToMany然后再添加一个注解@JoinTable因为我们是要创建中间表...
  • 多对关系 - 三种中间表的创建方式 - 优劣总结 方式一、手动创建第三张表 方式二、自动创建第三张表 - MandyToManyField 方式三、半自动创建第三张表 -- 手动创建第三张表+ManyToMany建立关系(推荐使用) ...
  • ASP.NET的MVC5的多对关系在model层可以轻松表示出来,但也许你会碰到和我一样的问题,即我们需要在中间表添加字段来更方便我们的业务逻辑的实现或者说让我们的数据库设计显得更加合理。我们使用codefirst方式生成...
  • 多对关系中间表命名

    千次阅读 2019-09-24 11:00:09
    在网上看一些,以及我个人使用的方法,总结一个规则:table1_table2 转载于:https://www.cnblogs.com/Jerrycjc/p/7146971.html
  • 一、中间表-多对关系的转化实际中,经常存在多对关系。以订单和商品为例,一个订单对应多个商品,一个商品也对应多个订单。此时在将E-R图转化为关系模型时,需要引入中间表(也叫做连接表)。中间表包含两个实体...
  • laravel删除多对中间表关联关系

    千次阅读 2018-03-22 16:32:49
    detach方法将会从中间表中移除相应的记录
  • 数据库两张表多对关系为什么用中间表而不用相互外建,菜鸟求指点
  • Event事件表 ...事件对人员是多对多的关系中间表Person_Event只有两个字段(PERSON_ID,EVENT_ID),邮件地址表只对应人员ID,一个人可以多个邮箱   *************** CLASS PERSON ***************
  • 前两个关系都只需要两个表本身就能表达清楚他们之间的关系,而多对关系则需要第三张中间表来表达清楚两张表之间的关系. 在一般情况下是由三个字段组成:1、中间表本身的自增主键,2、两张表各自的主键。这时候命名...
  • ![图片说明](https://img-ask.csdn.net/upload/201512/04/1449199839_652888.png)
  • 一、中间表-多对关系的转化 实际中,经常存在多对关系。以订单和商品为例,一个订单对应多个商品,一个商品也对应多个订单。此时在将E-R图转化为关系模型时,需要引入中间表(也叫做连接表)。 中间表包含两个...
  • Hibernate 学习心得之一 多对关系中,中间表无法插入数据。最近学习 spring4+hibernate4,学习中遇到了很多坑。在这里我来说说我遇到的坑,这里就不介绍如何spring如何集成hibernate。目前学习过程中,我遇到的两...
  • 数据库中的表 用户表:在配置实体类的时候放弃...需求:删除t_user表中的user_id 为1的用户,并删除相关的中间表纪录。 代码: @Test public void testRemove() { EntityManager manager = JPAUtil.createEn...
  • 前言 此文章只是为了给新手程序员,和经验不多的程序员...本次使用订单和员工建立多对关系。 首先是订单: public class Order { public int OrderId { get; set; } public string OrderTitle {
  • MyBatis 多对中间表插入数据

    万次阅读 2017-05-10 18:45:55
    在做这个员工管理系统demo的时候,由于user和role是多对关系,且user主键是自增的,所有我们没办法提前知晓这个user_id,所以插入的时候,就需要先插入user,然后再找到刚插入的id拿出来,再插入中间表user_role,...
  • 多对多的关联关系,建立了中间表,现在我想批量更新中间表的信息,该怎么传值,我能不能把我需要更新的中间表的id用数组装起来,现在不知mapper.xml里面怎么拼那个sql
  • 使用JoinTable生成的中间表只含有双方的主键,如何在生成这个中间表的同时可以生成其他字段
  • 一般情况下,多对多的关联关系是需要中间表的; 情况一:如果中间表仅仅是做关联用的,它里面仅有2个外键做联合主键,则使用ManyToMany(不用写中间表的Model,只需要写出两张主表的model即可) 学生表 @...
  • Hibernate框架可以将面向关系的数据库模型封装成面向对象的数据库模型,这样以来一方面了我们在具体应用中的数据库设计,另一...比如:在多对关系模型中,中间表往往含有自己的属性,这种情况在Hibernate中该如何配
  • hibernate之多对多映射操作中间表

    千次阅读 2017-05-01 14:27:02
    hibernate之多对多映射操作中间表
  • 在我们的角色管理系统中,一个用户可以有多种角色,一种角色可以赋予多个用户,显然用户和角色...在上面两个实例中,都可对应于hibernate多对多映射关系的两种方式,在多对多映射中,我们往往使用中间表来建立关联关
  • 一对一的关系最简单,一个实体创建一张表就行了; 一对多和多对一的关系建表原则是一样的,在多的一方用外键列引用‘一’的一方的主键,来保证两者之间...多对多的关系,就是新创建一张中间表,以保证二者之间的联系。
  • 对多关系通过外键关系连接两个,而没有中间。 首先先引用一段集合的释义:   Bag:对象集合,每个元素可以重复。例如{1,2,2,6,0,0},在.Net中相当于IList或者IList实现。 Set:对象集合,每个元素...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 335,951
精华内容 134,380
关键字:

多对多关系中间表