JPA много к одному / один ко многим - PullRequest
0 голосов
/ 25 марта 2012

Я хотел бы создать запрос 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 Ответ

2 голосов
/ 25 марта 2012

Это похоже на отношение @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 = ?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...