精华内容
下载资源
问答
  • 需求:因为中间表使用两个外键作为联合主键 ,如果需要对中间表的属性进行修改, 1、一般做法 从实体类获取中间表的集合,然后遍历中间表的集合,然后修改。 WorkDateTime.getWorkDateTimeProducts()     2...

    因为中间表带有属性,采用的多对多映射方式 两个实体类都使用   @OneToMany( mappedBy="workDateTime")

     

    需求:因为中间表使用两个外键作为联合主键 ,如果需要对中间表的属性进行修改,

    1、一般做法

    从实体类获取中间表的集合,然后遍历中间表的集合,然后修改。

    WorkDateTime.getWorkDateTimeProducts()

     

     

    2、一般做法很麻烦,如果条件还需要判断ProductId,则更麻烦

    直接采用中间表仓库的做法

    1)、建立联合主键

     

    联合主键 

    public class WorkDateTimeProductKey  implements Serializable{

           private static final long serialVersionUID = 3586335994284551414L;

           private Product product;

           private WorkDateTime workDateTime;

    }

     

    2)、中间表的仓库 

    public interface  WorkDateTimeProductRepository extends JpaRepository<WorkDateTimeProduct, Long> {

          WorkDateTimeProduct findByWorkDateTime_IdAndProduct_Id(long workDateTimeId ,long productId);

    }

     

    3)由于业务上,经常会知道两个实体类的主键,就可以通过此方法:findByWorkDateTime_IdAndProduct_Id ()查询到WorkDateTimeProduct,然后直接修改

     

    WorkDateTime_Id 其中 _的意思是  查询WorkDateTimeProduct 的 WorkDateTime 的 id属性

     

    4)测试代码

     

    @SpringBootTest

    @RunWith(SpringRunner.class)

    public class WorkDateTimeProductRepositoryTest {

     

           @Autowired

           WorkDateTimeProductRepository WorkDateTimeProductRepository;

           

           @Test

           public void findByWorkDateTimeIdAndProductIdTest(){

                   WorkDateTimeProduct  workDateTimeProduct =WorkDateTimeProductRepository.findByWorkDateTime_IdAndProduct_Id(12l, 13l);

                   workDateTimeProduct.getAmount();

                  System.out.println(workDateTimeProduct.getAmount());

           }

    }

     

    实体类1

    @Entity

    //@JsonIgnoreProperties(value={"workDateTimeProducts"})

    public class WorkDateTime implements Serializable {

           

           private static final long serialVersionUID = 6788933059497808914L;

           @Id

           @GeneratedValue(strategy=GenerationType.IDENTITY)

           private long id ;

           

           @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")

           @DateTimeFormat(pattern = "yyyy-MM-dd")

           private Date dinnerDay;

           

           private byte dinnerTime; //  1noon 中餐,2 evening 晚餐,3 morning

           private byte state//订餐时间段是否有效 

           @OneToMany( mappedBy="workDateTime")

           private List<WorkDateTimeProduct> workDateTimeProducts = new ArrayList<WorkDateTimeProduct>();

           private byte printAllow;   //1为不可以打  2为可以打,

    }

     

     

    实现类2

    @Entity

    //@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })

    public class Product  implements Serializable{

           private static final long serialVersionUID = -3700731687896498304L;

           

           @Id

           @GeneratedValue(strategy=GenerationType.IDENTITY)

           private long id ;

           private String name;

           private String description;

           private short amount  ;

           private short price ;

           private String productImg;

           @OneToMany(mappedBy="product")

           List<WorkDateTimeProduct> workDateTimeProducts =new ArrayList<WorkDateTimeProduct> ();

    }

     

     

    中间表

    @Entity

    @IdClass(WorkDateTimeProductKey.class)

    public class WorkDateTimeProduct implements Serializable{

           private static final long serialVersionUID = 1207408560047174539L;

     

           @Id

           @ManyToOne()

           @JoinColumn(name="product_id")

           private Product product;

           @Id

           @JsonIgnore

           @ManyToOne()

           @JoinColumn(name="workdatetime_id")

           private WorkDateTime workDateTime;

           private byte state;

           

           private short amount ;

       

    }

     

     

    展开全文
  • 简单介绍 首先我们先了解一下什么叫虚拟虚拟,顾名思义就是就是实际上并存在(物理上存在),但是逻辑上存在的。...一般是在实体之间存在多对多的关系时,我们会创建一个中间表实体来给它们两个实体建立...

    简单介绍

    首先我们先了解一下什么叫虚拟表虚拟表,顾名思义就是就是实际上并不存在(物理上不存在),但是逻辑上存在的表。
    在MYSQL中存在三种虚拟表:临时表、内存表、视图

    1、基本表

    基本表是本身独立存在的表,在SQL中一个关系就对应一个表。

    2、中间表

    中间表它主要是用来兼容数据,建立映射关系,来兼容新老数据表的数据。一般是在实体之间存在多对多的关系时,我们会创建一个中间表实体来给它们两个实体建立起联系,时这个中间表实体与其他两个实体形成一对多的关系,这样可以有效的降低数据的冗余。
    比如:我们现在有一个学生表和课程表,这两个实体显然是一种多对多的关系,这时候我们就可以引入一个学生课程表来将他们联系起来,这个表我们可以将学生表和课程表的主键作为它的外键,这要学生表和课程表与学生课程表就是一个一对多的关系,简化了表关系否复杂度。

    3、临时表

    临时表是建立在系统临时文件夹中的表,如果使用得当,完全可以像普通表一样进行各种操作。 临时表的数据和表结构都储存在内存之中,退出时,其所占的空间会自动被释放。
    临时表又分为外部临时表和内部临时表。

    1、外部临时表

    通过CREATE TEMPORARY TABLE 创建的临时表,这种临时表称为外部临时表。这种临时表只对当前用户可见,当前会话结束的时候,该临时表会自动关闭。这种临时表的命名与非临时表可以同名(同名后非临时表将对当前会话不可见,直到临时表被删除)

    创建临时表的两种方式:

    CREATE TEMPORARY TABLE tmp_table (name VARCHAR(10) NOT NULL,    value INTEGER NOT NULL)    
    
    CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name
    

    2、内部临时表

    内部临时表是一种特殊轻量级的临时表,用来进行性能优化。内部临时表有两种类型:一种是HEAP临时表,这种临时表的所有数据都会存在内存中,对于这种表的操作不需要IO操作。另一种是OnDisk临时表,顾名思义,这种临时表会将数据存储在磁盘上。OnDisk临时表用来处理中间结果比较大的操作。如果HEAP临时表存储的数据大于MAX_HEAP_TABLE_SIZE(详情请参考MySQL手册中系统变量部分),HEAP临时表将会被自动转换成OnDisk临时表。OnDisk临时表在5.7中可以通过INTERNAL_TMP_DISK_STORAGE_ENGINE系统变量选择使用MyISAM引擎或者InnoDB引擎。

    创建内部临时表

    CREATE TEMPORARY TABLE tmp_table (name VARCHAR(10) NOT NULL,    value INTEGER NOT NULL)  TYPE=HEAP
    

    4、派生表

    派生表是从SELECT语句返回的虚拟表。派生表类似于临时表,但是在SELECT语句中使用派生表比临时表简单得多,因为它不需要创建临时表的步骤。
    当SELECT语句的FROM子句中使用独立子查询时,我们将其称为派生表。
    与子查询不同,派生表必须具有别名,以便稍后在查询中引用其名称。 如果派生表没有别名,MySQL将发出错误
    示例
    orders表和orderdetails表中获得2013年销售收入最高的前5名产品。
    在这里插入图片描述
    在这里插入图片描述

    5、视图

    视图是从一个或几个基本表导出的表。视图本身不存在独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍然存放在导出视图的基本表中。视图在概念上基本与表等同。视图在概念上与基本表等同,用户可以在基本表那样使用视图,可以在视图上再定义视图。
    如何创建视图

    create view view_name as
    # 这里写SQL语句
    
    展开全文
  • 中间表-多对多关系的转化: 在的使用中,经常存在多对多的关系,以订单和商品为例,一个订单对应多个商品,一个商品也对应多个订单,此时把E-R图(E-R图也称实体-联系图(Entity ...中间表的主键可以是两个外键作为

    中间表-多对多关系的转化:

    在表的使用中,经常存在多对多的关系,以订单和商品为例,一个订单对应多个商品,一个商品也对应多个订单,此时把E-R图(E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型)转化为关系模型时,需要引入中间表。

    中间表包含两个实体类的主键,建立两张表沟通。

    中间表也可以有普通字段,例如商品数量,每种商品总和(需要把他们与实体表中字段含义区分开)。

    中间表主键:

    中间表的主键可以是两个外键作为联合主键( 联合主键就是说,当一个字段可能存在重复值,无法确定这条数据的唯一性时,再加上一个字,两个字段联合起来确定这条数据的唯一性。比如你提到的id和name为联合主键,在插入数据时,当id相同,name不同,或者id不同,name相同时数据是允许被插入的,但是当id和name都相同时,数据是不允许被插入的),也可以是再增加一个主键字段。

    三个实体间存在多对多的关系:

    有一个实体与剩下两个实体存在N:M关系,剩下两个实体没有
    在这里插入图片描述
    三个实体间存在多对多关系
    在这里插入图片描述
    在这里插入图片描述

    中间表简述:

    中间表是业务逻辑中的概念,就是将计算结果先保存在一个临时的表中,然后再从这个表中计算,减少程序的复杂度。临时表是中间表多采用的一种技术,使用 Oracle临时表功能可以免去中间表数据的维护工作。

    中间表举例:

    分析表1(tableOne),找到唯一的业务主键,这是一个班级课程表,存储了课程的信息,主键就id。
    在这里插入图片描述
    分析表2(tableTwo)找到唯一的业务主键,这是一个课程单元表,存储了所有课程单元。
    在这里插入图片描述
    因为课程表和单元表没有关联信息,所以无法关联查询,这时需要中间表把两个表进行关联。
    在这里插入图片描述
    建立索引。
    在这里插入图片描述
    查询测试。
    在这里插入图片描述
    检验测试查询结果。
    在这里插入图片描述

    展开全文
  • 一般是在实体之间存在多对多的关系时,我们会创建一个中间表实体来给它们两个实体建立起联系,时这个中间表实体与其他两个实体形成一对多的关系,这样可以有效的降低数据的冗余。 比如:我们现在有一个

    简单介绍
    首先我们先了解一下什么叫虚拟表虚拟表,顾名思义就是就是实际上并不存在(物理上不存在),但是逻辑上存在的表。
    在MYSQL中存在三种虚拟表:临时表、内存表、视图

    1、基本表
    基本表是本身独立存在的表,在SQL中一个关系就对应一个表。

    2、中间表
    中间表它主要是用来兼容数据,建立映射关系,来兼容新老数据表的数据。一般是在实体之间存在多对多的关系时,我们会创建一个中间表实体来给它们两个实体建立起联系,时这个中间表实体与其他两个实体形成一对多的关系,这样可以有效的降低数据的冗余。
    比如:我们现在有一个学生表和课程表,这两个实体显然是一种多对多的关系,这时候我们就可以引入一个学生课程表来将他们联系起来,这个表我们可以将学生表和课程表的主键作为它的外键,这要学生表和课程表与学生课程表就是一个一对多的关系,简化了表关系否复杂度。

    3、临时表
    临时表是建立在系统临时文件夹中的表,如果使用得当,完全可以像普通表一样进行各种操作。 临时表的数据和表结构都储存在内存之中,退出时,其所占的空间会自动被释放。
    临时表又分为外部临时表和内部临时表。

    1、外部临时表
    通过CREATE TEMPORARY TABLE 创建的临时表,这种临时表称为外部临时表。这种临时表只对当前用户可见,当前会话结束的时候,该临时表会自动关闭。这种临时表的命名与非临时表可以同名(同名后非临时表将对当前会话不可见,直到临时表被删除)

    创建临时表的两种方式:

    CREATE TEMPORARY TABLE tmp_table (name VARCHAR(10) NOT NULL,    value INTEGER NOT NULL)    
    1
    CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name
    1
    2、内部临时表
    内部临时表是一种特殊轻量级的临时表,用来进行性能优化。内部临时表有两种类型:一种是HEAP临时表,这种临时表的所有数据都会存在内存中,对于这种表的操作不需要IO操作。另一种是OnDisk临时表,顾名思义,这种临时表会将数据存储在磁盘上。OnDisk临时表用来处理中间结果比较大的操作。如果HEAP临时表存储的数据大于MAX_HEAP_TABLE_SIZE(详情请参考MySQL手册中系统变量部分),HEAP临时表将会被自动转换成OnDisk临时表。OnDisk临时表在5.7中可以通过INTERNAL_TMP_DISK_STORAGE_ENGINE系统变量选择使用MyISAM引擎或者InnoDB引擎。

    创建内部临时表

    CREATE TEMPORARY TABLE tmp_table (name VARCHAR(10) NOT NULL,    value INTEGER NOT NULL)  TYPE=HEAP
    1
    4、派生表
    派生表是从SELECT语句返回的虚拟表。派生表类似于临时表,但是在SELECT语句中使用派生表比临时表简单得多,因为它不需要创建临时表的步骤。
    当SELECT语句的FROM子句中使用独立子查询时,我们将其称为派生表。
    与子查询不同,派生表必须具有别名,以便稍后在查询中引用其名称。 如果派生表没有别名,MySQL将发出错误
    示例
    orders表和orderdetails表中获得2013年销售收入最高的前5名产品。

    5、视图
    视图是从一个或几个基本表导出的表。视图本身不存在独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍然存放在导出视图的基本表中。视图在概念上基本与表等同。视图在概念上与基本表等同,用户可以在基本表那样使用视图,可以在视图上再定义视图。
    如何创建视图

    create view view_name as
    # 这里写SQL语句
    ————————————————
    版权声明:本文为CSDN博主「SunBairn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_44863976/article/details/102789392

    展开全文
  • 设计数据,遇到一个很常见的情况...中间表包含两个实体表的主键,建立两张沟通。中间表也可以有普通字段。例如商品数量,和每种商品总和。注意:要把他们与实体表中字段含义区分开。参考连接:https://zhidao.b...
  • 看了这个让我们顿悟: 维度:维度可以看成是用户...实体表:实体表就是一个实际对象的实体表它放的数据一定是一条条客观存在的事物数据,比如说设备 ,它就是客观存在的,所以可以将其设计一个实体表。 ...
  • 2018年06月04日 16:35:57 阅读数:322更多 个人分类: 数据库设计 设计数据,遇到一个很常见的情况。 ...中间表包含两个实体表的主键,建立两张沟通。中间表也可以有普通字段。例如商品数...
  • NHibernate是一个O/RM框架在其应用中会产生三部分内容:实体类、Mapping配置文件、数据库。这三者的联结促成了NHibernate的实现的...实体类和数据库是相互独立的二者知道对方的存在,中间任何的交互都是通过Map
  • 第一条不用多说,如果设计出来的模型不能正确反映想要表达的实体和各种约束,这自然是失败的设计。至于第二条,如果不注重表达的情绪,一上来就想去考虑有关效率的细节,这样做很容易陷入迷惑,表达清晰的设计容易....
  • Hibernate框架多对多时中间表没有主键ID时可以使用组合id,就是哪两列或者多列组合成为一个唯一标识一条记录的id值,在实体类映射文件中配置文件,例如学生,成绩,课程三者之间的关系,其中学号与课程号可以组合...
  • 但是在建立多对多关系的映射时,我们要借助一张中间表,并在中间表里添加外键,所以两张的建表语句就是正常的建表语句,只需要添加每个本身的字段即可,需要添加额外属性。 随便举个例子吧,route(线路)...
  • mybatis通过中间表实现一对多查询

    千次阅读 2020-05-09 22:36:22
    需求: 通过一个学生的id查询出该学生所学的...实体类( get、set方法省略): 1.student public class Student implements Serializable { private int id; private String stuNum; //学号 private String password
  • 前两个关系都只需要两个本身就表达清楚他们之间的关系,而多对多关系则需要第三张中间表来表达清楚两张之间的关系. 中间表在一般情况下是由三个字段组成: 1、中间表本身的自增主键 2、两张各自的主键。 .....
  • 作为员工的另外一个从,而映射为实体。在这种情况下,一个员工,有两个从合同和员工照片。员工照片结构的SQL语句如以下所示:CREATE TABLE tb_employee_photo ( id int(20) NOT NULL ...
  • 论Hibernate的实体间的关系…

    千次阅读 2014-03-29 22:11:19
    ---->>>:外表主键即为外键也为主键,主主键值和外键主键值一至,外表依赖主产生记录。 stuff 多对一关系映射:(xml配置版) ---->>>:外表主键即为外键也为主键,...
  • JPA实体关系映射

    千次阅读 2015-08-27 18:09:54
    实体关系是指实体实体之间的关系,从方向上分为单向关联和双向关联,从实体数量上分为一对一、一对多、多对多等。对于任何两个实体,都要从这两个方面区分它们之间的关系。 单向关联是一个实体中引用了另外一个...
  • JPA实体注解

    千次阅读 2018-05-02 17:56:31
    @Entity(name=”EntityName”)必须,name为可选,对应数据库中一的个@Table(name=””,catalog=””,schema=””)可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库的信息name:可选,...
  • 实体消歧、实体统一和指代消歧

    千次阅读 2020-03-07 09:58:39
    实体消歧主要是指:一个词可能含有多个意思,不同的上下文表达的含义可能也一样 例如:今天苹果发布了新手机 对于“苹果”我们怎么判断? 对于实体消歧来说我们得有一个实体库,库中包含每个实体,以及它所包含的...
  • 命名实体识别

    千次阅读 2018-10-23 14:46:04
    NER是NLP中一项基本任务,就是从文本中识别出命名性指称项,为关系抽取等任务做铺垫,在信息抽取、信息检索、机器翻译、问答系统等多种自然语言处理技术中必可少的组成部分。 命名实体识别研究的命名实体一般分为3...
  • JPA实体的常用注解

    千次阅读 2017-09-30 10:48:36
    1 、 @Entity(name="EntityName") 必须 ,name 为可选 , 对应数据库中一的个 ...可选 , 通常和 @Entity 配合使用 , 只能标注在实体的 class 定义处 , 表示实体对应的数据库的信息name: 可选 , 表示
  • hibernate实体关系

    千次阅读 2011-12-11 22:33:59
    (1) 外键关联:一个中添加一个字段作为外键,值是与其相对应一对一关系的主键值。 (2) 主键关联:两张一对一关系的共用一个主键,主外键是一个字段。   在实体关系中 (1) 单向关联,在任意一个...
  • NLP之中文命名实体识别

    万次阅读 2018-09-25 18:45:47
    在MUC-6中首次使用了命名实体(named entity)这一术语,由于当时关注的焦点是信息抽取(information extraction)问题,即从报章等非结构化文本中抽取关于公司活动和国防相关活动的结构化信息,而人名、地名、组织...
  • 实体鉴别GB/T 15843研究(合集)

    万次阅读 2018-10-31 22:07:50
    摘要:本文档对GB/T 15843介绍的实体鉴别进行简要分析记录。GB/T 15843包括GB/T 15843.1-2008 第1部份:概述;GB/T 15843.2-2008 第2部分:采用对称加密算法的机制;GB/T 15843.3-2008 第3部分:采用数字签名技术的...
  • IQ和ER最直接的联系就是在第一章中所讨论到的实体引用准备流程(ERA2)。...更经常的是,ER将作为实体数据(EBDI)集成的一个中间过程,EBDI是在第四章中详细讨论的话题。这将产生一个反馈循环,即在一
  • BiLSTM+CRF(二)命名实体识别

    千次阅读 2018-12-03 21:15:11
    前言 前一篇博客里面,我们已经提到了如何构建一个双向的LSTM网络,并在原来单层的RNN的基础上,修改少数几行代码即可实现。...这篇博客,我们就来看看如何通过BiLSTM+CRF来进行命名实体识别的任务...
  • 讲明白Spring Data JPA实体关联注解

    千次阅读 多人点赞 2020-03-21 10:21:52
    订单和订单中的商品也是一对多关系,但订单被删除时,订单所关联的商品肯定不能被删除。此时只要配置正确的级联关系,就能达到想要的效果。级联关系类型: CascadeType.REFRESH:级联刷新,当多个用户同时作操作一个...
  • Hibernate 实体类注解

    千次阅读 2014-04-20 18:26:11
    Hibernate注解 1。@Entity(name="EntityName") ...可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库的信息 name:可选,表示的名称.默认地,表名和实体名称一致,
  • HIbernate实体类注解配置

    千次阅读 2016-10-22 12:29:02
    一、类级别注解 1、@Entity(name="EntityName")  必须 name为可选,对应数据库中一的个 2、@Table(name="",catalog="",schema="") ...默认地,表名和实体名称一致,只有在一致的情况下才需要指定
  • Hibernate实体关联关系映射

    千次阅读 2018-08-03 10:52:40
     它将数据库中的映射成对应的对象,以对象的形式展现,这样我们就可以通过映射的对象来对数据库中的数据进行间接的操作。  关联映射是将数据库中的映射成与之相对应的对象,当你对这个对象进行操作的时候,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,128
精华内容 39,651
关键字:

中间表不能作为实体