У меня есть следующие отношения сущностей.
- Пользователь имеет несколько групп пользователей.
- Каждая группа пользователей имеет одну пользовательскую роль.
Сущности вместе с их отношениями отображаются так:
public class UserGroup {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", referencedColumnName = "user_id", nullable = false)
@Fetch(FetchMode.JOIN)
private User user;
@OneToOne(mappedBy = "userGroup", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@Setter(AccessLevel.NONE)
@Fetch(FetchMode.JOIN)
private UserRole userRole;
}
public class User {
@OneToMany(mappedBy = "user", fetch = FetchType.EAGER)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@Fetch(FetchMode.JOIN)
private Set<UserGroup> userGroups;
}
public class UserRole {
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_group_id")
@Fetch(FetchMode.JOIN)
private UserGroup userGroup;
}
Когда я выполняю простой запрос поиска с чем-то вроде этого:
userGroupDao.get(id)
Я вижу запрос гибернации, который присоединяется к группе пользователей, пользователю, пользователю. Мне нужен только запрос группы пользователей, так как user
и userRole
оба помечены FetchType.LAZY
. Здесь есть проблема инициализации?
Вот запрос гибернации:
Hibernate: /* criteria query */ select ...<list of columns>... from user_groups this_ inner join users storeduser2_ on this_.user_id=storeduser2_.user_id left outer join user_roles storeduser3_ on this_.id=storeduser3_.user_group_Id where this_.id=?
Hibernate: select ...<list of columns>... user_groups usergroupn0_ left outer join user_roles storeduser1_ on usergroupn0_.id=storeduser1_.user_group_Id where usergroupn0_.user_id=?