JPA多对一/一对多查询

时间:2012-03-25 09:38:15

标签: java mysql jpa

我想基于此表创建JPA查询

**category**                                              

(pk)CategoryID int (10)
category VARCHAR (45)         

**templatecat**

(pk/fk)templateId int(10)       
(pk/fk)categoryId int (10) 

 **template**

(pk)templateId int (10)
template madiumtext

我还有一个“tempaltecat”表,它包含类别和模板表的外键。我想创建查询,根据类别查找模板表中的所有模板,反之亦然。

这是我的表格映射

@Entity
@Table(name = "category")
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "templatecat", joinColumns = { @JoinColumn(name = "categoryId", unique = true) }, inverseJoinColumns = { @JoinColumn(name = "templateId") })

private Set<Template> template;

@Entity
@Table(name = "template")
@ManyToOne(optional = true)
@JoinTable(name = "templatecat", joinColumns = { @JoinColumn(name = "templateId") }, inverseJoinColumns = { @JoinColumn(name = "categoryId") })

private Category category;

提前致谢

1 个答案:

答案 0 :(得分:2)

它看起来像@ManyToMany关系,

您可以使用以下配置,而不是使用@OneToMany和@ManyToMany:

在分类中:

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "templatecat", joinColumns = { @JoinColumn(name = "categoryId", unique = true) }, inverseJoinColumns = { @JoinColumn(name = "templateId") })
private Set<Template> templates;

在Template类中:

@Entity
@Table(name = "template")
@ManyMany(optional = true, mappedBy="templates");
private Set<Category> categories;

如果要查看给定类别的所有模板,查询将为:

select o.templates from Category o where o.id = ?

反向也适用(模板中的所有类别)

select o.categories from Template o where o.id = ?

希望它能帮到你。