本文主要介紹了DBeaver如何操作,可以自動(dòng)生成ER圖,DBeaver的版本是6.2.0。表使用JPA自動(dòng)生成。具體JPA的使用見JPA規(guī)范總結(jié)和整理
創(chuàng)建表格
創(chuàng)建實(shí)體類
@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;
}
改配置文件自動(dòng)生成表格
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.database=mysql
spring.jpa.open-in-view=false
亂入一下:簡單記錄下別人整理的spring.jpa.open-in-view配置作用
open-in-view 是 Spring Boot 自動(dòng)加載 Spring Data JPA 提供的一個(gè)配置,全稱為
spring.jpa.open-in-view=true,它只有 true 和 false 兩個(gè)值,默認(rèn)是 true。那它到底有什么威力呢?通過上面的源碼我們可以看到,spring.jpa.open-in-view 的主要作用就是幫我們加載
OpenEntityManagerInViewInterceptor 這個(gè)類
我們可以發(fā)現(xiàn),OpenEntityManagerInViewInterceptor 實(shí)現(xiàn)了 WebRequestInterceptor
的接口中的兩個(gè)方法:public void preHandle(WebRequest request) 方法,里面實(shí)現(xiàn)了在每次的 Web MVC 請(qǐng)求之前,通過
createEntityManager 方法創(chuàng)建 EntityManager 和 EntityManagerHolder 的邏輯;public void afterCompletion(WebRequest request, @Nullable Exception
ex) 方法,里面實(shí)現(xiàn)了在每次 Web MVC 的請(qǐng)求結(jié)束之后,關(guān)閉 EntityManager 的邏輯。我們?nèi)绻^續(xù)看 createEntityManager 方法的實(shí)現(xiàn),還會(huì)找到如下關(guān)鍵代碼。 我們通過 SessionFactoryImpl
中的 createEntityManager() 方法,創(chuàng)建了一個(gè) EntityManager 的實(shí)現(xiàn) Session;通過攔截器創(chuàng)建了
EntityManager 事務(wù)處理邏輯,默認(rèn)是 Join 類型(即有事務(wù)存在會(huì)加入);而 builder.openSession()
邏輯就是 new SessionImpl(sessionFactory, this)。所以這個(gè)時(shí)候可以知道,通過 open-in-view 配置的攔截器,會(huì)幫我們的每個(gè)請(qǐng)求都創(chuàng)建一個(gè) SessionImpl 實(shí)例;而
SessionImpl 里面存儲(chǔ)了整個(gè) PersistenceContext 和各種事務(wù)連接狀態(tài),可以判斷出來 Session
的實(shí)例對(duì)象比較大。并且,我們打開 spring.jap.open-in-view=true
會(huì)發(fā)現(xiàn),如果一個(gè)請(qǐng)求處理的邏輯比較耗時(shí),牽涉到的對(duì)象比較多,這個(gè)時(shí)候就比較考驗(yàn)我們對(duì) jvm
的內(nèi)存配置策略了,如果配置不好就會(huì)經(jīng)常出現(xiàn)內(nèi)存溢出的現(xiàn)象。因此當(dāng)處理比較耗時(shí)的請(qǐng)求和批量處理請(qǐng)求的時(shí)候,需要考慮到這一點(diǎn)。
運(yùn)行程序,自動(dòng)創(chuàng)建表格
創(chuàng)建后的表格打印如下,可以看到是有外鍵生成的
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)
文章來源:http://www.zghlxwxcb.cn/news/detail-444546.html
DBeaver中生成ER圖
ctrl+左鍵選中需要?jiǎng)?chuàng)建ER關(guān)系圖的表,右鍵菜單欄里點(diǎn)擊創(chuàng)建新的ER圖填寫圖表的名字,點(diǎn)擊完成
自動(dòng)生成了er圖
點(diǎn)擊連線,可以看到外鍵文章來源地址http://www.zghlxwxcb.cn/news/detail-444546.html
到了這里,關(guān)于使用DBeaver自動(dòng)生成ER圖的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!