Кажется, что мне отвечает here, но я не уверен, чтобы повторить это, поскольку я не слишком хорошо знаком с JPA.Play framework 2: ПРИСОЕДИНЯЙТЕСЬ между моделями в Finder
Моя ситуация включает в себя 3-х классов: Role
, User
и Pool
, описанных следующим образом:
public class Role extends Model {
@Id public Long id;
public String name;
// ...
}
public class User extends Model {
@Id public Long id;
public string displayName;
// ...
@ManyToMany
public List<Role> roles;
// ...
}
public class Pool extends Model {
@Id public Long id;
public String name;
// ...
@ManyToMany
public List<Role> roles;
public List<User> getMembers() {
// ???
}
}
(Примечание: там также могут быть наложены ограничения на ресурсы, или разрешения, которые могут быть назначены для пользователей и бассейнов , который может быть использован для фильтрации в .. или вне .. пользователям разрешено в бассейне.)
Я добавил static
член
public static final Finder<Long, User> find = new Finder<Long, User>(Long.class, User.class);
класс Pool
(который должен использоваться в методе getPoolMembers
), но я не уверен, как получить всех пользователей с пересекающимися группами (и, возможно, с другими ограничениями).
Благодарим за помощь.
Есть ли поле пула для пользователей, чтобы связать эти два, или они связаны каким-то образом через Роли? – 2manyprojects
Да, они разделяют одни и те же роли, но, по сути, я не хочу прямых отношений между «пулом» и «пользователем»; «Пользователь» является частью пула, если он разделяет какую-либо из «роли» –
. Я не уверен, что вы можете настроить Ebean для этого. Я думаю, вам будет лучше выполнять запрос RawSql, поэтому вы можете сами настроить соединение. Я предполагаю, что ваш желаемый запрос будет похож на 'select * from User left join Pool on (User.role = Pool.role) где (Pool.id = $ id)' где $ id - это идентификатор пула, который вы вызываете getPoolMembers метод, справа? У меня нет синтаксиса Ebean RawSql передо мной, но я проверю пример ... – 2manyprojects