2014-03-28 29 views
2

我需要更新以下類的項目,儘管我可以更新所有項目,但該類的所有字段將更改爲null,並且其成員的連接將被刪除。爲什麼更新記錄的子項,刪除與子項的連接?

@Entity 
public class Category implements Serializable { 
    @Id 
    @GeneratedValue 
    private long id; 

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) 
    @LazyCollection(LazyCollectionOption.FALSE) 
    private List<Items> items; 

    private float price; 

    @ManyToOne 
    private Staff user; 

    @ManyToOne 
    private Staff owner; 

    @Temporal(javax.persistence.TemporalType.DATE) 
    private Date createDate; 
    .... 

@Entity 
public class Items { 

    @Id 
    @GeneratedValue 
    private Long id; 

    private int serial; 

    @OneToOne 
    private Product product; 
    ..... 

休眠

  Category cat = (Category) session.get(Category.class, id); 
      for (int i = 0; i < cat.getItems().size(); i++) { 
        cat.getItems().get(i).getProduct().setQuantity(10); 

        Part part = new Part(); 
        part.setName("Temp"); 
        cat.getItems().get(i).getProduct().getPart.add(part); 

        session.update(cat.getItems().get(i).getProduct()); 
        session.save(part); 

      } 
      tx.commit(); 

更新

之前
Category 
1 2000 Alex Jack 05-05-2014 

category_categoryitem 

1 137 

categoryitem 

137 900 20 

後更新

category 
1 0 Null Null Null 

category_categoryitem 


categoryitem 

137 900 20 
+1

發佈產品信息和零部件源代碼 – WeMakeSoftware

+0

請介紹變量產品,而不是3 x cat.getItems()。get(i).getProduct()。它會更容易閱讀。 –

回答

0

的代碼是正確的,所不同的是我剛添加@DynamicUpdate避免更新未修飾的領域,併除去的線,將其從另一功能更新所述表。

1

您是否試過使用@JoinTable來鏈接ItemCategory

Category.java

... 
@OneoMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY) 
@JoinTable(
    name="category_items", 
    joinColumns={@JoinColumn(name="category", referencedColumnName="id")}, 
    inverseJoinColumns={@JoinColumn(name="item", referencedColumnName="id")}) 
private Set<Items> items = new HashSet<Items>(); 
... 
+0

當前映射創建下列表格category,categoryitem,category_categoryitem – Jack