[英]Hibernate: Updating OneToMany relationship
我有一個父母,並列出了孩子的清單。
我可以知道在更新父母時如何更新孩子的清單嗎
例:
父級P1有孩子ABC。
我決定刪除B並添加D
因此父級P1在數據庫中具有子級ACD。
目前,我只刪除屬於父P1的所有子對象,然后再次填充chid(ACD)...我相信這樣做的方法更簡單。
我知道此任務非常敏感,請友好地告訴我需要設置什么以確保正確插入和刪除孩子。
新問題:
1)有沒有一種方法可以延遲更新/刪除關系? 我有一個名為FetchType.Lazy的列表,當我更新數據時,我可能不希望加載該關系或更新它。
2)如果列表中有項目ABC,則刪除項目C並執行dto.save()。 會刪除項目C嗎?
這是使用父級更新子級的映射-
@Entity
@Table(name = "COMPANY")
@SequenceGenerator(name="CompanySeq", sequenceName="COMPANYseq", allocationSize=1)
public class Company implements Serializable {
private static final long serialVersionUID = 1L;
/*
* Customer Company Details
*/
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CompanySeq")
@Column(name = "COMPANY_ID")
private Integer id;
@Column(name="COMPANY_NAME")
private String name;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "COMPANY_ID",nullable=false)
@OrderBy(clause = "PRODUCT_NAME" )
@ForeignKey(name = "fk_company_product")
private List<Product> products = new ArrayList<Product>();
}
@Entity
@Table(name = "PRODUCT")
@SequenceGenerator(name="CompanyProductSeq", sequenceName="COMPANY_PRODUCT", allocationSize=1)
public class Product implements Serializable{
/**
* SerialVersion ID
*/
private static final long serialVersionUID = 4073418246832063389L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CompanyProductSeq")
@Column(name = "PRODUCT_ID")
private Integer id;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "COMPANY_ID", updatable = false, insertable = false, nullable=false)
private Company companyId;
@Column(name = "PRODUCT_NAME")
private String name;
}
Promod為1+,因為他提供了很好的代碼來理解它。 您想要的功能全部與Hibernate Cascade
。 通過使用層疊,您只需要更新父Bean對象,其子對象列表和Cascade將完成其余的工作。
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "COMPANY_ID",nullable=false)
@OrderBy(clause = "PRODUCT_NAME" )
@ForeignKey(name = "fk_company_product")
private List<Product> products = new ArrayList<Product>();
在Pramod給出的上面的示例中,公司將有關產品的所有數據保留為子級。 這里
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
CascadeType.All也將對子對象執行所有父操作,即,對Company的插入/更新將對Product執行相同的操作,如果要更新Company的Products, 則只需要使用產品( FetchType.EAGER )來獲取已加載的Company Bean。 ,在Bean中修改或添加新產品並保存更新公司。 它將也保存/更新公司及其產品。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.