繁体   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