2009-08-22 98 views
0

我得类产品和商店具有多对多关系删除操作问题,在多对多关系

我想店里的删除不会导致删除相关产品的 而且产品没有的删除的导致相关商店的删除。

由于外键约束,当前正在删除实体引起的异常。

下面是这个类及其流利的Hibernate映射:

public class Product 
{ 
    public Product() 
    { 
     this.StoresStockedIn = new List<Store>(); 
    } 


    public virtual string Name { get; set; } 

    public virtual double Price { get; set; } 

    public virtual long ProductID { get; set; } 

    public virtual IList<Store> StoresStockedIn { get; set; } 

} 

public class Store 
{ 
    public Store() 
    { 
     this.Products = new List<Product>(); 
     this.Staff = new List<Employee>(); 

    } 

    public virtual string Name { get; set; } 
    public virtual IList<Product> Products { get; set; } 
    public virtual IList<Employee> Staff { get; set; } 
    public virtual long StoreID { get; set; } 
} 

public class ProductMap : ClassMap<Product> 
{ 
    public ProductMap() 
    { 
     this.Id(x => x.ProductID); 
     this.Map(x => x.Name); 
     this.Map(x => x.Price); 
     this.HasManyToMany(x => x.StoresStockedIn) 
      .Cascade.None() 
      .Table("StoreProduct"); 
    } 
public class StoreMap : ClassMap<Store> 
{ 
    public StoreMap() 
    { 
     this.Id(x => x.StoreID); 
     this.Map(x => x.Name); 
     this.HasManyToMany(x => x.Products) 
      .Cascade.None() 
      .Inverse() 
      .Table("StoreProduct"); 
     this.HasMany(x => x.Staff) 
      .Cascade.All() 
      .Inverse(); 
    } 
} 

感谢, 阿列克谢·扎哈罗夫

回答

0

如果你选择设置为NONE级联参数,它是由你来管理这个关系,所以要删除存储之前把商店属性值在产品零。就像卡尔经常说的,你会与另一个阶级(联合阶级)一起来获得关于关系的额外信息。

0

以休眠出来混的,并从数据库 角度来看只是在想,看来你产品实体保留其自己的库存清单 。我建议分离出该信息 ,以便您拥有一个称为产品库的关联实体,该关联实体将 关联产品wi不同的商店。例如:

产品(姓名,身份证) 存储(ID,姓名,地址)

ProductStore(产品,商店编号,quantity_in_store ....)。

这应该解决您描述的那种问题。

请记住商业规则:如果商店被删除,我怀疑商店里的 产品需要进行核算等等。 。 。

ķ