Спящий режим: критерии со множеством сторон?

Рассмотрим следующие два соотношения:

@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;
}

Не существует соответствующего класса сущности для таблицы соединений ATag. Теперь я хочу получить все экземпляры Foo с тегом с именем 'tag1', возможно ли использовать только критерии?

Возможно, полезен вспомогательный запрос, однако я не могу создать DetachedCriteria для класса ATag.class, который не существует.

Ответ 1

Только что справился с этой точной проблемой. Вы думаете в таблицах, а не в объектах. Просто укажите tags.name и пусть Hibernate позаботится об остальном:

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

Если вы посмотрите, как выкидывает SQL Hibernate, вы увидите, что он использует таблицу соединений.