我必须使用具有多对多关系的产品和商店课程
我想要删除商店不要删除相关商品 并且删除产品不会导致相关商店的删除。
目前因外键约束而删除实体导致异常。
以下是这些类及其在流畅的休眠方式中的映射:
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();
}
}
谢谢, Alexey Zakharov
答案 0 :(得分:0)
将Hibernate从混合中解放出来,只是从数据库中思考 看来,您的产品实体似乎保留了自己的列表 它存放的商店。我建议分离出这些信息 所以你有一个称为产品商店的关联权利 将产品与不同的商店联系起来。例如:
产品(名称,ID) 商店(身份证,姓名,地址)
ProductStore(product_id,Store_id,quantity_in_store ....)。
这应该解决您描述的问题。
牢记业务规则:如果商店被删除,我怀疑 商店里的产品需要占用等等。 。
ķ
答案 1 :(得分:0)
如果您选择将Cascade参数设置为NONE,则由您来管理此关系,因此在删除商店之前将产品中的store属性值设置为null。就像卡尔经常说的那样,你会来另一个类(关联类)来保存关于关系的额外信息。