首先,我想指出我是Spring和Hibernate的新手。
我一直在尝试将Hibernate与MySQL(使用Spring Data)连接起来,我已经成功完成了这项工作,但是,当我尝试插入时,我无法让它按照我的意愿去做。
我想要完成的是拥有一个User类,其中包含一个包含其首选编码语言的ArrayList。例如:
但是,我注意到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
make attribute name(Languages)“UNIQUE”;那么你确保没有重复