0

クエリの作成を手伝ってください! 共通の親オブジェクトを介して、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;

....

および Category オブジェクト:

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

@Id
@GeneratedValue
private long id;

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

.....

そのため、特定のカテゴリに属する​​すべてのタグをカテゴリ ID で選択する必要があります。やり方がちょっと複雑!

誰でも助けてください!

4

1 に答える 1

2

これには基準を使用する必要はありません。条件は、変数の検索条件に基づいてクエリを動的に構成するために使用する必要があります。

使用できる 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

また

select tag from Tag tag
inner join tag.advert a
where a.category.id = :categoryId
于 2011-11-18T13:51:23.987 に答える