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”表中包含的类别和模板table.I`外键创建JPA查询d喜欢创建基于类别在模板表中查找所有模板的查询,反之亦然。
这里是我的表映射提前
答
它看起来像一个@ManyToMany关系
@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;
感谢,
而不是使用@OneToMany和@ManyToMany的,你可以使用下面的配置:
分类类别:
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "templatecat", joinColumns = { @JoinColumn(name = "categoryId", unique = true) }, inverseJoinColumns = { @JoinColumn(name = "templateId") })
private Set<Template> templates;
模板类:
@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 = ?
希望它对你有帮助。
我认为我的关系是正确的,因为一个类别可以有很多模板,但一个模板不能有多个类别。但是我认为我的问题有点不清楚,我想查找给定类别名称上的所有模板。 – 2012-03-26 07:25:02
所以,为什么不使用'@ OneToMany'(类别中)和'@ ManyToOne'(模板中)关系?通过这种方式,你不需要一个中间表,查询就是:'从类别o中选择o.templates,其中o.name =?' – leozin 2012-03-26 17:04:08