本文介紹了JPA-多對(duì)多AS ElementCollection的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我有一個(gè)多對(duì)多關(guān)系,它將標(biāo)簽(只有字符串)分配給項(xiàng)目:
+------+ +------------+ +-------+
| ITEM | | ITEM_LABEL | | LABEL |
|------| |------------| |-------|
| ID |<->| ITEM_ID | ┌>| ID |
|------| |------------| | |-------|
| .... | | LABEL_ID |<┘ | TEXT |
+------+ +------------+ +-------+
..。我希望避免為L(zhǎng)abel表創(chuàng)建POJO類,而將其作為字符串集合保留在Item類中。有沒(méi)有使用JPA(Hibernate)注釋的方法?
我嘗試將@CollectionTable與@JoinTable組合,但顯然不起作用:
@Entity
public class Item {
@Id
private long id;
@ElementCollection
@JoinTable(name = "ITEM_LABEL", joinColumns = @JoinColumn(name = "ITEM_ID"))
@CollectionTable(name = "LABEL", joinColumns = @JoinColumn(name = "ID", referencedColumnName = "LABEL_ID"))
@Column(name = "TEXT")
private Collection<Strings> labels;
}
有人能告訴我如何將標(biāo)簽作為字符串集合包括在Item類中嗎?非常感謝!
推薦答案
@JoinTable
用于將以下關(guān)聯(lián)映射到數(shù)據(jù)庫(kù)表:雙向多對(duì)一/一對(duì)多、單向多對(duì)一和一對(duì)一(雙向和單向)關(guān)聯(lián)。
如果確實(shí)要將Label
與他自己的表一起使用,則必須將其定義為Entity
,然后使用ManyToMany
關(guān)系。
另一種解決方案是刪除Label
表,并在item_label
表中將標(biāo)簽名稱保留為LABEL
,而不是label_id。
因此您的關(guān)系將變?yōu)?/p>
@ElementCollection
@CollectionTable(name = "ITEM_LABEL", joinColumns = @JoinColumn(name = "ITEM_ID"))
@Column(name = "LABEL")
這篇關(guān)于JPA-多對(duì)多AS ElementCollection的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,