[英]In “One to Many” Mapping hibernate data is getting inserted in child table while updating parent table
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="BILLING_INFORMATION")
public class BillingInformation {
@Id
@Column(name="BILL_NO", unique = true, nullable = false, length = 100)
private String bNo;
@Column(name="BILL_DATE", length = 100)
private String billDate;
@Column(name="PARTY_NAME", length = 100)
private String partyName;
@Column(name="SUB_TOTAL", length = 100)
private String subTotal;
@Column(name="TOTAL", length = 100)
private String total;
@OneToMany(fetch=FetchType.EAGER, mappedBy="billInformation", cascade = CascadeType.ALL,orphanRemoval=true)
Set<BillingItemInformation> setBillingItemInformation;
@OneToMany(fetch=FetchType.EAGER, mappedBy="billInformation", cascade = CascadeType.ALL,orphanRemoval=true)
Set<BillingTaxInformation> setBillingTaxInformation;
----all getters and setters----
}
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="BILLING_ITEM_INFORMATION")
public class BillingItemInformation {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "RECORD_ID", unique = true, nullable = false, length = 100)
private int recordNo;
@Column(name = "S_NO", length = 100)
private String sNo;
@Column(name="ITEM", length = 100)
private String item;
@Column(name="QTY", length = 100)
private String qty;
@Column(name="PRICE", length = 100)
private String price;
@Column(name="AMOUNT", length = 100)
private String amount;
@ManyToOne
@JoinColumn(name="BILL_NO", nullable=false)
private BillingInformation billInformation;
---all getters and setters----
}
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="BILLING_TAX_INFORMATION")
public class BillingTaxInformation {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "RECORD_ID", unique = true, nullable = false, length = 100)
private int recordNo;
@Column(name = "TAX_NAME", length = 100)
private String taxName;
@Column(name = "TAX_PERCENTAGE", length = 100)
private String taxInPercent;
@Column(name = "TAX_AMOUNT", length = 100)
private String taxAmount;
@ManyToOne
@JoinColumn(name="BILL_NO", nullable=false)
BillingInformation billInformation;
--------all getters and setters----
}
我剛剛開始從簡單的Java jdbc學習休眠,作為我們項目要求的一部分,我必須維護上述三個類,但是當我更新BillingInformation.java實體類對象時,BillingTaxInformation.java和BillingItemInformation.java類對象將插入相同的對象。不同的記錄號 請糾正我在哪里做錯了。
您在集合的兩個@OneToMany映射中都使用了層疊= CascadeType.ALL。
這意味着對BillingInformation實體執行的任何操作都將傳播到子BillingItemInformation和BillingTaxInformation。
那就是你
..同樣適用於這些孩子。
如果您只想在父實體為
,但是在MERGE和后續更新期間,您不想將這些操作級聯到子級,然后按以下方式設置映射:
@OneToMany(fetch=FetchType.EAGER, mappedBy="billInformation"
, cascade = { CascadeType.PERSIST, CascadeType.REMOVE }
,orphanRemoval=true)
Set<BillingItemInformation> setBillingItemInformation;
@OneToMany(fetch=FetchType.EAGER, mappedBy="billInformation"
, cascade ={ CascadeType.PERSIST, CascadeType.REMOVE }
,orphanRemoval=true)
Set<BillingTaxInformation> setBillingTaxInformation;
更新
使用休眠注釋,您可以配置如下:
@Cascade({CascadeType.PERSIST, CascadeType.DELETE})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.