mysql数据库如何创建冗余小的表_mysql – Hibernate创建冗余的多对多表
在開發(fā)我的Spring Boot應用程序時,我不得不放棄我的數(shù)據(jù)庫并讓Hibernate使用hibernate.hbm2ddl.auto = update再次生成它.之后我想確保它完成了我想做的所有事情,所以我打電話給MySQL Workbench來反向工程我的整個數(shù)據(jù)庫.當我這樣做時,我注意到由于某種原因,我的架構中有兩倍的表.我的表中有很多實體關系,但它們都是一對多的,但由于某種原因,幾乎所有的一對多關系Hibernate都生成了多對多的連接表.這讓我感到意外,因為之前使用相同的Web應用程序并沒有發(fā)生這種情況.
我通過搜索引擎優(yōu)化只搜索了一個似乎無關緊要的this問題.
現(xiàn)在我將提供樣本,但我有很多代碼,我想保持簡短,所以我將只剪切一個例子.如果您需要了解更多信息,請在答案中注明.
所以,例如,我有這個實體:
@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表.如果沒有此表,您可以看到該技能仍然引用自身.當我在此表中插入新數(shù)據(jù)時,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})注釋.雖然似乎不太可能
>我的最后一個更改是我在項目中創(chuàng)建了第二個數(shù)據(jù)源,這就是為什么我將@EnableAutoConfiguration更改為@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class}).可能是Hibernate現(xiàn)在表現(xiàn)得有些不同嗎?
>我還將所有實體移動到另一個包中.
總結
以上是生活随笔為你收集整理的mysql数据库如何创建冗余小的表_mysql – Hibernate创建冗余的多对多表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 本地mysql备份至rds_阿里云RDS
- 下一篇: 连接到多台mysql_Oracle通过d