Об ошибке сообщили как о пустой коллекции, инициализированной запросом JOIN FETCH (Lazy Loading) - PullRequest
0 голосов
/ 01 июля 2019
@Entity
public class User{

    private String username;

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name="user_group",
        joinColumns=@JoinColumn(name="user_id",referencedColumnName="id"),
        inverseJoinColumns=@JoinColumn(name="group_id",referencedColumnName="id"))
    private Set<Group> groups=new HashSet<Group>();

}



@Entity
public class Group{

    private String name;

    @ManyToMany(fetch = FetchType.LAZY,mappedBy = "groups")
    private Set<User> users=new HashSet<USer>();

}

У меня есть отношение ManyToMany между этими двумя объектами пользователь и группа .
Я инициализирую группы, используя JOIN FETCH, как,

SELECT u FROM User u JOIN FETCH u.groups g WHERE u.id = 1

Это работает до тех пор, пока в коллекции моих групп есть хотя бы один объект, но возникает проблема, когда user.groups () пуст.В этом случае я не могу инициализировать groups , но мне все еще нужно инициализировать коллекцию, чтобы я мог добавить новые элементы в группы, в противном случае я получаю ошибку LazyinitializationException.

Например:
у нас есть user1 , и у него есть 2 группы в названных коллекциях групп, group1 и group2 .

user1.getGroups(); --> group1, group2


В этом случае вышеупомянутый запрос работает, но если groups пуст, он больше не работает, и моя проблема начинается здесь,
Я пытаюсьдобавьте группу к user1 и я стану LazyinitializationException.

Group group3=new Group("group3");
user1.getGroups().add(group3); --> Here will reported an error

Как я могу предотвратить это?

Заранее спасибо.
R.

...