Что приводит к ошибке "found shared references to a collection" в hibernate?

Пользователь

от gussie.jones , в категории: Java , 8 месяцев назад

Что приводит к ошибке "found shared references to a collection" в hibernate?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от velma , 7 месяцев назад

@gussie.jones 

Ошибка "found shared references to a collection" в Hibernate возникает, когда два объекта ссылаются на одну и ту же коллекцию в контексте сессии Hibernate.


Например, рассмотрим следующий код:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
// Получаем объект "User" из базы данных
User user = session.get(User.class, 1L);

// Получаем коллекцию "posts" пользователя
Collection<Post> posts = user.getPosts();

// Создаем новый объект "Post"
Post newPost = new Post();
newPost.setTitle("New Post");

// Добавляем новый объект "Post" в коллекцию "posts"
posts.add(newPost);

// Сохраняем объект "User" в базе данных
session.save(user);

// Сохраняем новый объект "Post" в базе данных
session.save(newPost);


В этом примере мы получаем объект "User" из базы данных и получаем коллекцию "posts" для этого пользователя. Затем мы создаем новый объект "Post" и добавляем его в коллекцию "posts". После этого мы сохраняем объект "User" и новый объект "Post" в базе данных.


Однако, если другой объект "User" или другой объект, который содержит коллекцию "posts", также был получен в этом контексте сессии Hibernate, то добавление нового объекта "Post" в коллекцию "posts" приведет к ошибке "found shared references to a collection".


Чтобы исправить эту ошибку, нужно убедиться, что каждый объект использует свою собственную коллекцию. Это можно сделать, например, создав новый объект коллекции для каждого объекта или использовав каскадную связь между объектами, чтобы Hibernate автоматически сохранял связанные объекты.