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.
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.