3

メディアとタグの間に多対多の関係があります。

中くらい:

@ManyToMany(fetch=FetchType.EAGER)
@IndexColumn(name="tags_index_column")
@JoinTable(name="tag_map",
          joinColumns={@JoinColumn(name="tag_id")},
          inverseJoinColumns={@JoinColumn(name="item_id")})
private List<Tag> tags;

タグ:

@ManyToMany(mappedBy="tags")
@JoinTable(name="tag_map",
        joinColumns={@JoinColumn(name="item_id")},
              inverseJoinColumns={@JoinColumn(name="tag_id")})
private List<Medium> media;

hql から結合テーブルをクエリしようとしましたが、常に例外が発生します。

String resultQueryString = "From tag_map"

        Query resultQuery SessionFactory.getCurrentSession().createQuery(resultQueryString);

例外:

org.springframework.orm.hibernate3.HibernateQueryException: tag_map is not mapped [From tag_map]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: tag_map is not mapped [From tag_map]

基本的にやりたいことは、特定の ID を持つタグを持つすべてのメディアを照会することです。残念ながら、私はジョイント可能にアクセスできません。

助言がありますか?:)

4

1 に答える 1

8

HQL クエリは、テーブルではなくエンティティに関して記述されるため、任意のテーブル テーブルに対してクエリを実行することはできません。

したがって、次のように、結合テーブルに直接アクセスするのではなく、エンティティ間の論理関係に関してクエリを作成する必要があります。

select m from Medium m join m.tags t where t.id = ?

以下も参照してください。

于 2011-02-09T11:31:34.493 に答える