簡體   English   中英

JPA共享實體映射

[英]JPA Shared Entity mapping

我有一個場景,我有一個名為Page的對象,另一個名為Tag的對象,這兩者之間的關系是Page具有Tags(很多),但是相同的Tag也可以與Product共享,這里的關系也就是Product具有標簽(很多)。

在正常情況下,我將在Tag中創建一個type列,其中type可能是Enum值(產品,頁面),並使用諸如SELECT * from tag的查詢,其中parent_id = page_id和type = page。

如何在JPA中執行此操作(如何創建此關系以及如何查詢數據)

我認為您應該創建兩個關聯表。 一種用於將頁面與標簽相關聯,一種用於將產品與標簽相關聯。 代碼:

@Entity
@Table(name = "page")
class Page {
  ....

    @OneToMany
    @JoinTable(name = "jnd_pages_tags", joinColumns = @JoinColumn(name = "page_fk"),
            inverseJoinColumns = @JoinColumn(name = "tag_fk"))
    private Set<Tag> tags;      
}

@Entity
@Table(name = "page")
class Product {
  ....

    @OneToMany
    @JoinTable(name = "jnd_products_tags", joinColumns = @JoinColumn(name = "products_fk"),
            inverseJoinColumns = @JoinColumn(name = "tag_fk"))
    private Set<Tag> tags;      
}

@Entity
@Table(name = "tags")
class Tag {
.....
}

選擇相應的頁面標簽,使用

SELECT p.t FROM Page p WHERE p.id = :id

選擇產品的相應標簽,使用

SELECT p.t FROM Product p WHERE p.id = :id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM