Будьте в спящем режиме удаляют каскад

select p.product_id, s.sales_date, s.sales_count, r.receipt_count
from
  products p,
  (select count(*) sales_count, sales_date, product_id from sales group by 2,3) s
  (select count(*) receipt_count, receipt_date, product_id from receipts group by 2,3) r
where 
  p.product_id = s.product_id
  and p.product_id = r.product_id
  and s.sales_date=r.receipt_date
;
9
задан Brian Tompsett - 汤莱恩 1 July 2015 в 12:27
поделиться

3 ответа

Прямо из документации. Это объясняет Вашу проблему точно, я верю:

Однако этот код

Parent p = (Parent) session.Load(typeof(Parent), pid);
// Get one child out of the set
IEnumerator childEnumerator = p.Children.GetEnumerator();
childEnumerator.MoveNext();
Child c = (Child) childEnumerator.Current;

p.Children.Remove(c);
c.Parent = null;
session.Flush();

не удалит c из базы данных; это только удалит ссылку на p (и вызовет ограничительное нарушение NOT NULL, в этом случае). Необходимо явно Удалить () Дочерний элемент.

Parent p = (Parent) session.Load(typeof(Parent), pid);
// Get one child out of the set
IEnumerator childEnumerator = p.Children.GetEnumerator();
childEnumerator.MoveNext();
Child c = (Child) childEnumerator.Current;

p.Children.Remove(c);
session.Delete(c);
session.Flush();

Теперь, в нашем случае, Ребенок не может действительно существовать без его родителя. Таким образом, если мы удаляем Ребенка из набора, мы действительно хотим, чтобы он был удален. Для этого мы должны использовать каскад = "all-delete-orphan".

<set name="Children" inverse="true" cascade="all-delete-orphan">
    <key column="parent_id"/>
    <one-to-many class="Child"/>
</set>

Править:

Относительно обратного материала я полагаю, что это только определяет, как sql сгенерирован, см. этот документ для большего количества информации.

Одна вещь отметить, получите Вас

not-null="true"

на many-one отношениях в Вашем быть в спящем режиме конфигурация?

11
ответ дан 4 December 2019 в 21:52
поделиться

Удаление происходит на Проекте сначала и располагается каскадом к Вопросу, но Проект удаляет, включает обнуление project_id в Вопросах (для ссылочной целостности. Вы не получаете исключение на удалении объекта Вопроса, но потому что каскад пытается аннулировать FK в Вопросе (вопросах).

Рассмотрение "Персистентности Java с В спящем режиме", я думаю, что, из чего Вы действительно хотите каскадный тип, удаляют или удаляют, не удалять-висячие-строки.

-2
ответ дан 4 December 2019 в 21:52
поделиться

Одна стратегия состоит в том, чтобы отметить внешний ключ в базе данных с on-delete-cascade, поэтому как только NHibernate говорит базе данных удалять проект, сама база данных расположит каскадом удаление. Затем необходимо сказать NHibernate, что сама база данных делает каскадное удаление.

0
ответ дан 4 December 2019 в 21:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: