Коллекция гибернации с @ElementCollection содержит дублированные элементы в базе данных

#spring #postgresql #hibernate #jpa #spring-data-jpa

#spring #postgresql #спящий режим #jpa #spring-data-jpa

Вопрос:

Есть класс.

 @Entity
@Table(name="sessions")
@Component
public class Session {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ElementCollection
    private Set<String> addedWords;
}
  

Мой поток: получить сеанс один раз. Добавьте одно слово в addedWords сеанс и сохраните его, повторите. Проблема в том, что когда я проверяю свою базу данных, там много дубликатов, в то же время у меня нет никаких дубликатов в классе Java. Таким Set<String> addedWords образом, in class и this слова в базе данных не совпадают. Почему у меня такое странное поведение и как заставить вещи работать хорошо без какого-либо дублирования? Я использую PostgreSQL. Метод сохранения:

 public synchronized void addWord(Session session, String word) {
        session.getAddedWords().add(word);
        sessionRepository.save(session);
}
  

Здесь spring config

 spring:
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update
  

Комментарии:

1. Вы имеете в виду, что когда вы пытаетесь добавить одно и то же слово к нескольким Session объектам, а затем сохранить их, вы получаете дублированные записи word в DB, верно?

2. @SternK нет, я добавляю в набор только разные слова, но каким-то образом они дублируются в базе данных, например, в наборе у меня есть [a, b, c, d], в базе данных есть [a, a, b, b, c, c, d] например. Это происходит после 1 сохранения, когда оно сохраняется в первый раз, дубликатов нет, но затем они появляются … (при сохранении 2 )

3. Не могли бы вы показать, как вы ее сохраняете?

4. Пожалуйста, создайте и опубликуйте полную демонстрацию, выполнив все добавления и сохранения, чтобы воспроизвести эту проблему.