Lenik
Lenik

Reputation: 14458

Hibernate: Criteria with many-to-many join table?

Consider the following two relations:

@Entity class Foo {
    @Id id;

    @ManyToMany
    @JoinTable(name = "ATag", 
         joinColumns = @JoinColumn(name = "foo_id"),
         inverseJoinColumns = @JoinColumn(name = "tag_id"))
    Set<Tag> tags;
}

@Entity class Tag {
    @Id Long id;
    String name;
}

There is no corresponding entity class for the join table ATag. Now, I want to get all Foo instances with Tag named 'tag1'. Is it possible using only Criteria?

A subquery may be helpful. However, I can't create DetachedCriteria for class ATag.class which doesn't existed.

Upvotes: 17

Views: 23332

Answers (1)

atrain
atrain

Reputation: 9255

Just dealt with this exact issue. You're thinking in tables, not objects. Just reference tags.name and let Hibernate take care of the rest:

Criteria crit = session.createCriteria(Foo.class);
crit.createAlias("tags", "tagsAlias");
crit.add(Restrictions.eq("tagsAlias.name", someValue);

If you watch the SQL Hibernate spits out, you'll see it uses the join table.

Upvotes: 33

Related Questions