• 使用DBeaver自动生成ER图


    本文主要介绍了DBeaver如何操作,可以自动生成ER图,DBeaver的版本是6.2.0。表使用JPA自动生成。具体JPA的使用见JPA规范总结和整理

    创建表格

    创建实体类

    @Entity
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    @Table(name = "company")
    public class Company {
        @Id
        @Column(name = "id", columnDefinition = "varchar(64)")
        @GenericGenerator(name="idGenerator", strategy="uuid")
        @GeneratedValue(generator = "idGenerator")
        private String id;
    
        private String name;
    
        private String address;
    }
    
    
    @Entity
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    @Table(name = "employee", uniqueConstraints = {@UniqueConstraint(columnNames={"department_id","company_id"})})
    public class Employee {
        @Id
        @Column(name = "id", columnDefinition = "varchar(64)")
        @GenericGenerator(name="idGenerator", strategy="uuid")
        @GeneratedValue(generator = "idGenerator")
        private String id;
    
        @Column(name = "name", columnDefinition = "varchar(128) default null")
        private String name;
    
        @Column(name = "department_id", columnDefinition = "varchar(32) default null")
        private String departmentId;
    
        @JoinColumn(name="company_id")
        @ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=false)
        private Company company;
    }
    
    • 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
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    改配置文件自动生成表格

    spring.jpa.hibernate.ddl-auto=update
    spring.jpa.show-sql=true
    spring.jpa.database=mysql
    spring.jpa.open-in-view=false
    
    • 1
    • 2
    • 3
    • 4

    乱入一下:简单记录下别人整理的spring.jpa.open-in-view配置作用

    open-in-view 是 Spring Boot 自动加载 Spring Data JPA 提供的一个配置,全称为
    spring.jpa.open-in-view=true,它只有 true 和 false 两个值,默认是 true。那它到底有什么威力呢?

    通过上面的源码我们可以看到,spring.jpa.open-in-view 的主要作用就是帮我们加载
    OpenEntityManagerInViewInterceptor 这个类
    我们可以发现,OpenEntityManagerInViewInterceptor 实现了 WebRequestInterceptor
    的接口中的两个方法:

    public void preHandle(WebRequest request) 方法,里面实现了在每次的 Web MVC 请求之前,通过
    createEntityManager 方法创建 EntityManager 和 EntityManagerHolder 的逻辑;

    public void afterCompletion(WebRequest request, @Nullable Exception
    ex) 方法,里面实现了在每次 Web MVC 的请求结束之后,关闭 EntityManager 的逻辑。

    我们如果继续看 createEntityManager 方法的实现,还会找到如下关键代码。 我们通过 SessionFactoryImpl
    中的 createEntityManager() 方法,创建了一个 EntityManager 的实现 Session;通过拦截器创建了
    EntityManager 事务处理逻辑,默认是 Join 类型(即有事务存在会加入);而 builder.openSession()
    逻辑就是 new SessionImpl(sessionFactory, this)。

    所以这个时候可以知道,通过 open-in-view 配置的拦截器,会帮我们的每个请求都创建一个 SessionImpl 实例;而
    SessionImpl 里面存储了整个 PersistenceContext 和各种事务连接状态,可以判断出来 Session
    的实例对象比较大。

    并且,我们打开 spring.jap.open-in-view=true
    会发现,如果一个请求处理的逻辑比较耗时,牵涉到的对象比较多,这个时候就比较考验我们对 jvm
    的内存配置策略了,如果配置不好就会经常出现内存溢出的现象。因此当处理比较耗时的请求和批量处理请求的时候,需要考虑到这一点。

    运行程序,自动创建表格

    创建后的表格打印如下,可以看到是有外键生成的

    Hibernate: create table company (id varchar(64) not null, address varchar(255), name varchar(255), primary key (id)) engine=InnoDB
    Hibernate: create table employee (id varchar(64) not null, department_id varchar(32) default null, name varchar(128) default null, company_id varchar(64) not null, primary key (id)) engine=InnoDB
    
    Hibernate: alter table employee drop index UKir8n5ax8yt8608nlq39f6aw0t
    Hibernate: alter table employee add constraint UKir8n5ax8yt8608nlq39f6aw0t unique (department_id, company_id)
    Hibernate: alter table employee add constraint FK5v50ed2bjh60n1gc7ifuxmgf4 foreign key (company_id) references company (id)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    在这里插入图片描述

    DBeaver中生成ER图

    ctrl+左键选中需要创建ER关系图的表,右键菜单栏里点击创建新的ER图
    在这里插入图片描述填写图表的名字,点击完成
    在这里插入图片描述自动生成了er图
    在这里插入图片描述
    点击连线,可以看到外键
    在这里插入图片描述

  • 相关阅读:
    postgreSQL触发器
    Spring MVC注解Controller源码流程解析---请求匹配中的容错处理
    Numpy数组处理(二)
    vSphere6.7创建Windows Server 2012虚拟机及磁盘扩容
    maven打包时和 deploy时候将不会 依赖包含在生成的项目 jar中方法
    oracle-sql语句执行过程
    【设计模式】第5节:创建型模式之“简单工厂、工厂方法和抽象工厂模式”
    解决HtmlUnit执行JS报错提示ScriptException
    B. Phoenix and Beauty
    高光谱成像技术简介,怎么选择成像方案?
  • 原文地址:https://blog.csdn.net/weixin_43554422/article/details/126387553