Как вставить списки в таблицу, не повторяя их, если они уже существуют (Использование Spring и Hibernate) - PullRequest
1 голос
/ 21 марта 2019

Прежде всего, я хотел бы отметить, что я новичок в Spring и Hibernate.

Я пытался соединить Hibernate с MySQL (используя Spring Data), что я успешно сделал, однако, когда я пытаюсь сделать вставку, я не могу заставить ее делать то, что я хочу.

Я пытаюсь создать класс User с ArrayList, который содержит предпочитаемые языки кодирования. Например:

  • Пользователь 1: C, Java, C ++
  • Пользователь 2: Python, Java, C ++

Однако я заметил, что Hibernate создаст новую строку в таблице «Языки», даже если она уже есть. Я также хочу сохранить «идентификатор» в качестве первичного ключа и в качестве числового значения.

Ниже показано, как в данный момент языки вставляются в таблицу: `

+----+--------+
| id | name   |
+----+--------+
|  2 | C      |
|  3 | Java   |
|  4 | C++    |
|  6 | Python |
|  7 | Java   |
|  8 | C++    |
+----+--------+

Вот как я хочу их:

+----+--------+
| id | name   |
+----+--------+
|  2 | C      |
|  3 | Java   |
|  4 | C++    |
|  6 | Python |
+----+--------+

Я пробовал разные методы, но они всегда повторяют значения ...

Это мой класс пользователя:

@Entity
public class User {
    @Id
    @GeneratedValue
    private int id;
    private String username;
    @OneToMany(cascade = CascadeType.ALL)
    private List<Language> languages;

    ...
}

А это мой языковой класс:

@Entity
public class Language {
    @Id
    @GeneratedValue
    private int id;
    private String name;

    ...
}

РЕДАКТИРОВАТЬ: Вот как я добавляю языки для каждого пользователя (это просто тест, а не окончательный код):

ArrayList<Language> languages = new ArrayList<>();
languages.add(new Language("C"));
languages.add(new Language("Java"));
languages.add(new Language("C++"));
Image image = null;
User admin = new User("iscle", "albertiscle9@gmail.com", "Test_Password", languages, image);
userRepository.save(admin);

ArrayList<Language> languages2 = new ArrayList<>();
languages2.add(new Language("Python"));
languages2.add(new Language("Java"));
languages2.add(new Language("C++"));
Image image2 = null;
User admin2 = new User("iscle", "albertiscle9@gmail.com", "Test_Password", languages2, image2);
userRepository.save(admin2);

Любая помощь будет оценена :) 1032 *

Спасибо заранее,

Iscle

1 Ответ

0 голосов
/ 21 марта 2019

сделать имя атрибута (Языки) "УНИКАЛЬНЫМ";тогда вы гарантируете, что дубликатов не будет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...