日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql数据库如何创建冗余小的表_mysql – Hibernate创建冗余的多对多表

發布時間:2025/3/15 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql数据库如何创建冗余小的表_mysql – Hibernate创建冗余的多对多表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在開發我的Spring Boot應用程序時,我不得不放棄我的數據庫并讓Hibernate使用hibernate.hbm2ddl.auto = update再次生成它.之后我想確保它完成了我想做的所有事情,所以我打電話給MySQL Workbench來反向工程我的整個數據庫.當我這樣做時,我注意到由于某種原因,我的架構中有兩倍的表.我的表中有很多實體關系,但它們都是一對多的,但由于某種原因,幾乎所有的一對多關系Hibernate都生成了多對多的連接表.這讓我感到意外,因為之前使用相同的Web應用程序并沒有發生這種情況.

我通過搜索引擎優化只搜索了一個似乎無關緊要的this問題.

現在我將提供樣本,但我有很多代碼,我想保持簡短,所以我將只剪切一個例子.如果您需要了解更多信息,請在答案中注明.

所以,例如,我有這個實體:

@SuppressWarnings("serial")

@Entity

@Indexed

@Table(name = "SKILL")

public class Skill extends AbstractDomainObject {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "ID", nullable = false)

private long id;

//Some properties

@ManyToOne(fetch = FetchType.EAGER, targetEntity = Skill.class)

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

@Cascade({CascadeType.DETACH})

//Cascade annotations are from Hibernate, all else except for

//"Indexed" are from javax.persistence

private Skill parent;

@OneToMany(fetch = FetchType.EAGER, targetEntity = Skill.class)

@Cascade({CascadeType.DETACH})

private Set children;

//Getters, setters, etc

}

您可以看到此實體引用自身.技能在這里是一棵樹.所以,Hibernate將其解釋為:

事實上,甚至沒有使用skill_skill表.如果沒有此表,您可以看到該技能仍然引用自身.當我在此表中插入新數據時,skill_skill中不會顯示任何新內容.雖然這兩個實體由于某種原因沒有得到額外的表:

這兩個對象在這里有一個單方面的關系:

@SuppressWarnings("serial")

@Entity

@Table(name = "ROLE")

public class Role implements DomainObject {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "ID", nullable = false)

private long id;

@Column(name = "ROLENAME", nullable = false, length = 50)

private String rolename;

@ManyToOne(fetch = FetchType.EAGER)

@JoinColumn(name = "OWNER", nullable = false)

private User owner;

}

我能想到的一些原因:

> Abstract AbstractDomainObject超類.它只具有保護的樣板功能.之前它沒有引起任何問題.

>我添加的@Cascade({CascadeType.DETACH})注釋.雖然似乎不太可能

>我的最后一個更改是我在項目中創建了第二個數據源,這就是為什么我將@EnableAutoConfiguration更改為@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class}).可能是Hibernate現在表現得有些不同嗎?

>我還將所有實體移動到另一個包中.

總結

以上是生活随笔為你收集整理的mysql数据库如何创建冗余小的表_mysql – Hibernate创建冗余的多对多表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。