Есть таблица 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"));
}
Как-то так:
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.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Требуется сделать элемент, который будет перемещаться внутри родительского элемента при скроллинге страницыТ
Начал изучать веб программированиеПишу в учебных целях сайт с регистрацией, авторизацией, личным кабинетом и т