Как использовать критерии поиска в спящем режиме для параметра с набором - PullRequest
0 голосов
/ 11 октября 2019

У меня есть несколько сущностей, где у одной из них есть параметр с Set, содержащий другие сущности из объединения многие-ко-многим, как это (я использую только две из них для простоты). Как я могу использовать критерии поиска для фильтрации пользователей, у которых есть аватар с идентификатором == 1?

@Entity
public class User
{
    @Id
    private String loginId;
    private String screenName;
    @ManyToMany(mappedBy = "user")
    private Set<Avatar> avatars;
}

@Entity
public class Avatar
{
    @Id
    private Integer id;
    @ManyToMany
    @JoinTable(
        name = "user",
        joinColumns = @JoinColumn(name = "id"),
        inverseJoinColumns = @JoinColumn(name = "loginId"))
    private User user;
    private String url;
}

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Вы можете использовать root.join для достижения этой цели.

int avatarId = 1;
CriteriaQuery<User> query = criteriaBuilder.createQuery(User.class);
Root<User> user = query.from(User.class); 
criteriaBuilder.and(criteriaBuilder.equal (
    user.join("avatars").get("id"), avatarId));
0 голосов
/ 11 октября 2019

Вы можете использовать собственный запрос, чтобы получить то, что вы хотите. Синтаксис будет выглядеть следующим образом:

 @Query(
    value = "select * from ...",
    nativeQuery = true
)

Возможно, вы сможете реорганизовать таблицы из базы данных, не влияя на бизнес-логику. Я не знаю, какие у вас требования, но я думаю, что вы можете использовать @ ManyToOne.

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