Запрос на выборку left join hibernate

212
13 апреля 2017, 16:23

Есть таблица users & words связь многие ко многим. И связующая таблица, ну например users_words(неожиданно, да?) Как можно проделать при помощи Criteria такую выборку:

select * 
from words 
left join users_words on users_words.word_id = words.id
where users_words.user_id = {id} or 
      users_words.id is null'

Как я понимаю hibernate связывает через inner join но мне нужен left.

public class Group implements DomainModel{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
    ...
    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
    @JoinTable(name = "user_groups", joinColumns = {
            @JoinColumn(name = "group_id") },
            inverseJoinColumns = { @JoinColumn(name = "user_id") })
    private Set<User> users = new HashSet<User>(0);
}
public class User implements DomainModel{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
    ...
    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "users")
    private Set<Group> groups = new HashSet<Group>(0);
}
{
    Criteria criteria = session.createCriteria(Group.class);
    criteria.setFetchMode("users", FetchMode.JOIN);
    criteria.createAlias("users","usersAlias");
    criteria.add(Restrictions.isNull("users.id"));
}
Answer 1

Как-то так:

List<Group> groups = session.createCriteria(Group.class, "g")
    .createAlias("users", "u", JoinType.LEFT_OUTER_JOIN)
    .add(
        Restrictions.or(
            Restrictions.eq("u.id", 1L),
            Restrictions.and(
                Restrictions.isEmpty("g.users"),
                Restrictions.isEmpty("u.groups")
            )
        )
    )
    .list();

Выбирает все группы, в которые никто не входит и которые никто не включает, а также группу, в которую входит пользователь с ID = 1.

READ ALSO
Аналог position: fixed; относительно родителя

Аналог position: fixed; относительно родителя

Требуется сделать элемент, который будет перемещаться внутри родительского элемента при скроллинге страницыТ

260
Видео на всю ширину и высоту экрана

Видео на всю ширину и высоту экрана

Есть видеРазмещаю вот так

242
backend и frontend

backend и frontend

Начал изучать веб программированиеПишу в учебных целях сайт с регистрацией, авторизацией, личным кабинетом и т

202