我遇到的情况,我有一个名为Page对象,并要求标签另一个对象,这两者之间的关系是页有标签(多对多),但同样的标签也可以与产品共享,在这里关系也是一样的产品有标签(多对多)。JPA共享实体映射
在正常情况下,我将创建一个标签式的列,其中类型可以是枚举值(产品页),并使用象SELECT * FROM标签,其中PARENT_ID = PAGE_ID和类型=页。
如何在JPA做到这一点(如何建立这种关系,以及如何查询数据)
我遇到的情况,我有一个名为Page对象,并要求标签另一个对象,这两者之间的关系是页有标签(多对多),但同样的标签也可以与产品共享,在这里关系也是一样的产品有标签(多对多)。JPA共享实体映射
在正常情况下,我将创建一个标签式的列,其中类型可以是枚举值(产品页),并使用象SELECT * FROM标签,其中PARENT_ID = PAGE_ID和类型=页。
如何在JPA做到这一点(如何建立这种关系,以及如何查询数据)
我想你应该创建关联的两个表。一个将Pages与标签相关联,一个将产品与标签相关联。代码:
@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
但在通过标签搜索条目的情况下,我需要返回与该标签,然后我需要搜索2代表的产品和网页,以后我可能会引入一个新的这可以被标记对象,那么它变得复杂,同时通过标签 –
我宁愿使用继承然后搜索,你可以创造一些@MappedSuperclass TagContainer,铁,其中将包含一套标记和编号。这样,您就可以使用像'选择T FROM TagContainer牛逼JOIN t.tags标签WHERE tag.id =:tagId' –
问题:如果页面 - >标签的关系是一个到很多,那么相同的标签不能用于多个页面,这同样适用于产品。这是你想要的行为吗? – Augusto
噢亚对不起它很多很多,我将编辑我的问题 –