Спящий режим: критерии со множеством сторон?
Рассмотрим следующие два соотношения:
@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, вы увидите, что он использует таблицу соединений.