2012-03-25 2 views
0

Я хотел бы создать 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` d хотел бы создать запрос, который находит все шаблоны в таблице шаблонов на основе категории и наоборот.

Вот моя таблица отображения

@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; 

Заранее спасибо

ответ

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; 

В классе шаблона:

@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 = ? 

Надеюсь, это вам помогло.

+0

Я думаю, что мое отношение верно, потому что одна категория может иметь много шаблонов, но один шаблон не может иметь более одной категории. Однако я думаю, что мой вопрос был немного неясным, мне бы хотелось найти все шаблоны по названию данной категории , –

+0

Итак, почему вы не используете '@ OneToMany' (в категории) и отношение' @ ManyToOne' (в шаблоне)? Таким образом, вам не понадобится промежуточная таблица, и запрос будет выглядеть следующим образом: 'select o.templates из категории o, где o.name =?' – leozin

Смежные вопросы