Как написать запрос выбора для разбивки на страницы вывода из атрибутов ManyToMany - PullRequest
2 голосов
/ 10 февраля 2010

У меня есть таблица Group с отношением ManyToMany к таблице User через таблицу соединений. Группа может содержать много пользователей или может содержать подгруппы, содержащие больше пользователей.

Я использую JPA, Hibernate 3.3

  1. Как разбить на страницы результаты, возвращаемые Group.getUsers (), которые могут быть либо пользователями, полученными через Group.getUsers, либо всеми пользователями из подгрупп в Group.getGroups

Примечание. Поскольку я выразил это как отношение ManyToMany, у меня нет таблицы сущностей (для таблицы соединения), и я не уверен, как выполнить какие-либо запросы с использованием JPA для таблицы соединения.

@Entity
@Table(name = "group")
public class Group {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false, insertable = false, updatable = false)
    private Integer id;

    @Column(name = "name", length = "255", nullable = false)
    private String name;

    @ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.LAZY)
    @JoinTable(name = "group_user", joinColumns = @JoinColumn(name = "group_id"), inverseJoinColumns = @JoinColumn(name = "user_id"))
    private List<User> users = new ArrayList<User>(0);

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "group_subgroup", joinColumns = @JoinColumn(name = "src_group_id"), inverseJoinColumns = @JoinColumn(name = "target_group_id"))
private List<Group> groups = new ArrayList<Group>(0);

1 Ответ

1 голос
/ 10 февраля 2010

Вы можете добавить private List<Group> groups (ленивый) в пользовательскую сущность. И есть, для групп:

`SELECT u FROM User u JOIN u.groups g WHERE g=:group`

и для подгрупп:

`SELECT u FROM User u JOIN u.groups WHERE g IN (:groups)`

(и звоните query.setParameter("groups", group.getGroups()))

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