2012-04-16 19 views
1

子を参照していないときに親を削除する必要があります。これはHibernateで可能ですか? (実際に私は流暢なnhibernateを使用していますが、私は答えが同じであると推測します)Hibernate:子が参照していない親を削除する

私は異なる会社の多くの顧客を持っています。会社の最後の顧客を削除すると、会社の詳細も自動的に削除されます。

普通の親子関係とは違って、私は意識的に会社の削除を選択していません。ユーザーが懸念している限り、顧客を削除するだけです。参照されていない企業を削除することは、これの単なる副産物です。

答えて

5

Hibernateはあなたのためにそれを魔法にしません。あなたはそれを自分で実装する必要があります:

Company company = customer.getCompany(); 
company.removeCustomer(customer); 
session.delete(customer); 
if (company.getCustomers().isEmpty()) { 
    session.delete(company); 
} 
+0

@Andy:さらに、「会社」には、たとえば「建物」のような他のリンクがある可能性があります。 「会社」を削除する場合は、手動でリンクを解除する必要があります。 –

0

私はNHibernateのマッピングを経てこれを行う方法を知らない、あなたはおそらくレコード数をカウントし、あなたの削除顧客のロジックにいくつかのロジックを記述する必要があります顧客識別子が削除されていない企業識別子を持つ顧客テーブルで、結果の数が0の場合は、顧客と企業を削除します。

psudoコード:

また
public void Delete(Customer customer) 
{ 
    using (var transaction = session.BeginTransaction()) 
    { 
     int remainingCustomers = 
      session.Query<Customer>(c => c.CompanyId == customer.CompanyId && c.CustomerId != customer.CustomerId).Count(); 

     session.Delete(customer); 

     if (remainingCustomers == 0) 
     { 
      session.Delete(customer.Company); 
     } 

     transaction.Commit(); 
    } 
} 

削除は瞬時に発生する必要がない場合、あなたは「整頓」の古い企業へのスケジュールでストアドプロシージャを実行することができます。

関連する問題