如果列表已经存在,如何将列表插入表中而不重复它们(使用Spring和Hibernate)

问题描述 投票:1回答:1

首先,我想指出我是Spring和Hibernate的新手。

我一直在尝试将Hibernate与MySQL(使用Spring Data)连接起来,我已经成功完成了这项工作,但是,当我尝试插入时,我无法让它按照我的意愿去做。

我想要完成的是拥有一个User类,其中包含一个包含其首选编码语言的ArrayList。例如:

  • 用户1:C,Java,C ++
  • 用户2:Python,Java,C ++

但是,我注意到Hibernate将在“语言”表中创建一个新行,即使它已经存在。我还想将“id”保持为主键和数值。

以下是它当前如何将语言插入表中:`

+----+--------+
| 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", "[email protected]", "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", "[email protected]", "Test_Password", languages2, image2);
userRepository.save(admin2);

任何帮助将不胜感激 :)

提前致谢,

iscle

java mysql spring list hibernate
1个回答
-2
投票

make attribute name(Languages)“UNIQUE”;那么你确保没有重复

© www.soinside.com 2019 - 2024. All rights reserved.