Построитель запросов JPA

Помогите создать запрос! Мне нужно выбрать все теги по categoryId через общий родительский объект.

у меня следующее:

@Table(name="ADVERT")
@Entity(name="Advert")
public class JpaAdvert implements Advert{

@Id
@GeneratedValue
private long id;

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="category_id", referencedColumnName="id")
private JpaCategory category = new JpaCategory();

@ManyToMany(fetch=FetchType.EAGER, cascade={CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name="ADVERT_TAGS", joinColumns=@JoinColumn(name="advert_id",referencedColumnName="id"), inverseJoinColumns=@JoinColumn(name="tag_id", referencedColumnName="id"))
private Set<JpaTag> tags = new HashSet<JpaTag>();

...

Объект тега:

@Entity(name="Tag")
@Table(name="TAG")
public class JpaTag implements Tag {

@Id
@GeneratedValue
private long id;

private String name;

private long weight=1;

private String locale;

....

и объект категории:

@Table(name="CATEGORY")
@Entity(name="Category")
public class JpaCategory implements Category {

@Id
@GeneratedValue
private long id;

@Column(name="category_name")
private String categoryName;

.....

Поэтому мне нужно выбрать ВСЕ теги, которые принадлежат определенной категории по идентификатору категории. Это немного сложно для меня, как это сделать!

Помогите пожалуйста кто нибудь!


person Andrey Skrypnik    schedule 18.11.2011    source источник


Ответы (1)


Для этого не нужно использовать критерии. Критерии следует использовать для динамического составления запроса на основе переменных критериев поиска.

Вот JPQL, который вы могли бы использовать:

select distinct tag from Advert a
inner join a.tags tag
where a.category.id = :categoryId

Вероятно, было бы более естественно, если бы у вас были двунаправленные ассоциации. Затем вы можете использовать

select tag from Tag tag where tag.advert.category.id = :categoryId

or

select tag from Tag tag
inner join tag.advert a
where a.category.id = :categoryId
person JB Nizet    schedule 18.11.2011