Hibernate: Критерии с таблицей «многие ко многим»? - PullRequest
14 голосов
/ 19 июля 2011

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

@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 Ответ

30 голосов
/ 21 июля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...