我在hibernate中定義了以下兩個類
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
}
@Entity
public class PhoneNumber {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne(cascade = CascadeType.ALL)
private Person person;
}
當我堅持一個電話號碼物件或一個人物件時,它會被正確插入。但是當我這樣做時
Person person = session.get(Person.class,1);
session.remove(person);
transaction.commit();
我得到外鍵違規例外。但是既然我已經將一個列宣告為 ManyToOne 不應該休眠自動洗掉相應的 phonnumber 記錄?
我不確定是否需要添加任何額外的代碼來做到這一點
uj5u.com熱心網友回復:
你有一個雙向關系,這就是為什么你也必須添加PhoneNumbers Person。并使用該mappedBy屬性表明它Person是反面,每當它被洗掉時,請同時洗掉每個電話號碼。
像這樣:
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToMany(mappedBy="person", cascade = CascadeType.ALL)
private Set<PhoneNumber> phoneNumbers;
}
檢查此以獲取更多資訊。
uj5u.com熱心網友回復:
首先,您必須在兩個類中定義 Person 和 PhoneNumber 之間的關系。
拋出錯誤是因為有電話號碼取決于您洗掉的人員物件。如果您添加@OneToMany,您還可以定義該屬性cascade = CascadeType.ALL,然后所有電話號碼都將被洗掉。
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToMany(mappedBy = "person", cascade = CascadeType.ALL)
private List<PhoneNumber> phoneNumbers;
}
@Entity
public class PhoneNumber {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne
private Person person;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/432630.html
上一篇:Django-太多類似的查詢
