Reputation: 14458
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
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