我不知道如何用spring-boot / hibernate連接3個表。 這些表是。用戶、技術、類別
每個用戶都有所有的10個類別,但在這些類別中,他們可以保存一個或多個技術。每個技術可以被列在幾個不同的類別中。
我有一段部分有效的代碼,因為現在我沒有參考表格中的類別,而只是創建了新的類別,所以我的 BDD 中出現了重復。 理想情況下,我希望每個用戶的資料結構都能像這樣(偽代碼):
{
{
"category1" : {id, name}。
"technologies" [{id, name}, {id, name}, {id, name} ] 。
},
{
"category2" : {id, name}.
"技術
}
.
.
.
}
我的表是:
用戶表
public class MyUser{
//其他屬性。
@OneToMany(mappedBy="id")
private Collection<Category> categories;
}
技術學
public class Technology{
//其他屬性
@Id[/span
@SequenceGenerator(name = "id_seq"。sequenceName = "id_seq", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_seq" )
私有的int id。
@Column(name = "name")
私有字串名稱。
}
技術類別:
public class TechnologyCategory {
//其他屬性 //其他屬性
@Id[/span
@SequenceGenerator(name = "id_seq"。sequenceName = "id_seq", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_seq" )
私有的int id。
@Column(name="name")
私有字串名稱。
}
而我試圖將用戶與類別(每個類別都有技術串列)聯系起來的表格
USER_CATEGORIESpublic class UserCategory {
@Id
@SequenceGenerator(name = "id_seq"/span>, sequenceName = "id_seq", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_seq" )
私有的int id。
@Column(name = "name")
private String technologyCategory; //這里我想參考技術類別表。
@ManyToMany()
收集<技術> 技術。
}
所以對于我來說,我已經試過/讀過這個。 使用MySQL連接三個表
ManyToManyToMany - 使用 Hibernate 注解連接三個表
但是沒有成功,因為每次嘗試實施上述解決方案都會出現例外(都與hibernate無法創建表有關),我無法解決。 謝謝你
uj5u.com熱心網友回復:
如果我理解正確的話,假設你的示例代碼有效的話,這樣的東西會對你起作用:
用戶類,它是由用戶自己決定的。
用戶類,加入類別:
public class User {
@Id
@SequenceGenerator(name = "id_seq", sequenceName = "id_seq", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_seq" )
私有的int id。
//其他屬性 //其他屬性
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_categories"。joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id") 。
inverseJoinColumns = @JoinColumn(name = "category_id"/span>, referencedColumnName = "id"/span>)
私有的Set<Category>類別。
}
Category物體,它包含了技術的類別,以及技術:
。public class Category{
@Id
@SequenceGenerator(name = "id_seq"/span>, sequenceName = "id_seq", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_seq" )
私有的int id。
//其他屬性 //其他屬性
@ManyToOne。
@JoinColumn(name = "technology_category_id"/span>)
私人技術類別類別。
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "category_technologies", joinColumns = @JoinColumn(name = "category_id", referencedColumnName = "id") 。
inverseJoinColumns = @JoinColumn(name = "technology_id"/span>, referencedColumnName = "id"/span>)
私有的Set<Technology> technologies。
}
TechnologyCategory物體:
public class TechnologyCategory {
//其他屬性 //其他屬性
@Id[/span
@SequenceGenerator(name = "id_seq"。sequenceName = "id_seq", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_seq" )
私有的int id。
@Column(name="name")
私有字串名稱。
}
技術物體:
public class Technology {
//其他屬性
@Id[/span
@SequenceGenerator(name = "id_seq"。sequenceName = "id_seq", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_seq" )
私有的int id。
@Column(name="name")
私有字串名稱。
}
如果你不希望id顯示在你的JSON中,只需在id屬性的上方加上@JsonIgnore注解即可
。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/327132.html
標籤:
上一篇:如何禁用Hibernate的SequenceInformation獲取功能?
下一篇:如何用串列創建物體
