簡體   English   中英

休眠:更新一對多關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM