親を参照する子がない場合は、親を削除する必要があります。これはHibernateで可能ですか?(実際、私は流暢なnhibernateを使用していますが、答えは同じだと思います)
たとえば、さまざまな会社の顧客がたくさんいます。会社の最後の顧客を削除するときに、会社の詳細も自動的に削除したいと思います。
通常の親子関係とは異なり、私は意識的に会社を削除することを選択しません。ユーザーに関する限り、彼は顧客を削除しているだけです。参照されていない会社を削除することは、これの副産物にすぎません。
親を参照する子がない場合は、親を削除する必要があります。これはHibernateで可能ですか?(実際、私は流暢なnhibernateを使用していますが、答えは同じだと思います)
たとえば、さまざまな会社の顧客がたくさんいます。会社の最後の顧客を削除するときに、会社の詳細も自動的に削除したいと思います。
通常の親子関係とは異なり、私は意識的に会社を削除することを選択しません。ユーザーに関する限り、彼は顧客を削除しているだけです。参照されていない会社を削除することは、これの副産物にすぎません。
Hibernateはあなたのために魔法のようにそれをしません。自分で実装する必要があります。
Company company = customer.getCompany();
company.removeCustomer(customer);
session.delete(customer);
if (company.getCustomers().isEmpty()) {
session.delete(company);
}
NHibernateマッピングを介してこれを行う方法がわかりません。おそらく、顧客IDが1つではない会社IDを使用して、顧客テーブルのレコード数をカウントする顧客削除ロジックにロジックを記述する必要があります。削除され、結果のカウントが0の場合は、顧客と会社を削除します。
疑似コード:
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();
}
}
または、削除をすぐに実行する必要がない場合は、スケジュールに従ってストアドプロシージャを実行して、古い会社を「整理」することができます。