2009-08-22 11 views
0

I Klassen Produkt- und Shop haben, die zu viele Beziehung viele habenProblem Löschvorgang in viele zu viele Beziehung

Ich möchte Löschen von Speicher nicht löschen von verwandten Produkt verursachen und Löschen von Produkt nicht zu verursacht das Löschen von verwandten Geschäften.

Derzeit Löschen von Entity Ursache Ausnahme wegen Fremdschlüsseleinschränkung.

Hier ist diese Klassen und deren Abbildung in fließend 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(); 
    } 
} 

Danke, Alexey Zakharov

Antwort

0

wenn Sie die Cascade-Parameter auf NONE setzen, ist es an Sie, diese Beziehung zu verwalten und so den Speicher Eigenschaftswert in dem Produkt zu null setzen, bevor Sie den Speicher zu löschen. Wie Karl oft sagte, Sie kommen mit einer anderen Klasse (Verbandsklasse), um zusätzliche Informationen über die Beziehung zu halten.

0

Hibernate Unter der Mischung aus und nur aus der Datenbank Perspektive zu denken, scheint es, dass Ihre Product Entity behält seine eigene Liste von Geschäften ist es in gelagert. Ich empfehle, diese Informationen zu trennen , so dass Sie eine Assoziation Entität namens Produktgeschäft, die assoziieren ein Produkt wi th verschiedene Geschäfte. Beispiel:

Produkt (Name, ID) Store (ID, Name, Adresse)

ProductStor (product_id, store_id, quantity_in_store ....).

Dies sollte die Art von Problem ansprechen, die Sie beschreiben.

Halten Sie die Geschäftsregeln im Hinterkopf: Wenn ein Geschäft gelöscht wird, vermute ich, dass die Produkte im Geschäft berücksichtigt werden müssen und so weiter. . .

K