我有一個休眠實體類爲什麼是一對多的關係堅持多行數據庫
public class MyComplexClass implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
String name;
int number;
@ElementCollection
Map<String,String> myMap;
@ManyToOne
Simple simple;
public MyComplexClass(String name, int number, Map<String,String> myMap) {
this.name = name;
this.port = number;
this.myMap = myMap;
}
public MyComplexClass() {
// TODO Auto-generated constructor stub
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setNumber(int number) {
this.port = number;
}
public int getPort() {
return port;
}
public void setMyMap(Map<String,String> myMap) {
this.myMap = myMap;
}
public Map<String,String> getMyMap() {
return this.myMap;
}
public Simple getSimple() {
return this.simple;
}
而在類簡單的我有以下形式的映射
@Entity
@Table(name = "Simple")
public class Simple implements Comparable<Simple>, Serializable {
@JsonProperty
@OneToMany(mappedBy="simple",fetch = FetchType.EAGER,cascade = CascadeType.ALL)
Set<MyComplexClass> myComplexClass;
public void setMyComplexClass(List<MyComplexClass> myComplexClass) {
this.myComplexClass = myComplexClass;
}
public List<MyComplexClass> getMyComplexClass() {
return this.myComplexClass;
}
某處在系統我將值設置爲
Map<String, String> myMap = new HashMap<String,String>();
myMap.put("value","value");
MyComplexClass myComplexClass = new MyComplexclass("a", 123, myMap)
Set<MyComplexClass> myComplexClassList = new HashSet<MyComplexClass>();
myComplexClassList.add(myComplexClassList)
simple.setMyComplexClass(myComplexClassList);
myComplexClass.setSimple(simple);
// save to the database
dao.save(simple);
這會在我的複雜類中使用多行持續存在數據庫中與簡單類別相同的外鍵
Table: MyComplexClass
id name number simple_id
1 abc 234 1
2 abc 234 1
3 abc 234 1
4 abc 234 1
5 abc 234 1
6 xyz 432 2
7 xyz 432 2
8 xyz 432 2
我錯過了什麼?所有這些行的id是不同的,這讓我認爲他們已經在代碼中被多次初始化了。但他們不是。任何原因他們有不同的條目?我正在使用AKKA演員,這可能是一個原因嗎?
基於各種類似的問題。我已經改變了收藏是一個集和還增加了一個compareTo方法如下
public int compareTo(MyComplexClass o) {
if (o == null) {
return 1;
}
if (this.getName().equals(o.getName()) && this.getNumber() == o.getPort()) {
return 0;
}
return (int) (id - o.id);
}
'ElementCollection'應該被保存到一個單獨的(連接)表中,每個鍵/值對具有多行...一個。我沒有看到它在'MyComplexClass'表,所以不知道你是什麼意思 –
是的,你是對的,它堅持作爲一個單獨的表。但我的問題是關於List,它是Simple類中的元素集合。這些創建各種重複的行。不知道爲什麼 –
A'@ OneToMany'不是'@ ElementCollection'! '@ ElementCollection'是基本類型的容器,像以前一樣 –