Frage

Und wenn ja, was ist die Syntax?

Nehmen wir an, ich eine Instanz von Foo wollen von allen Instanzen der Bar unassociated sein: In SQL wäre es einfach sein:

delete from FOO_BAR_MAPPING
where FOO_ID = ?

In HQL nahm ich an, es wäre so etwas wie:

delete from Bar.foos foos
where foos.id = :id

(wobei foos eine kartiert Sammlung von Foo)

Aber scheint falsch zu sein, geben:

org.hibernate.hql.ast.QuerySyntaxException: Bar.foos is not mapped

Ist dies überhaupt möglich mit HQL?

War es hilfreich?

Lösung

Um Ihre Frage zu beantworten, nein, soweit ich weiß, es ist nicht möglich, mit HQL.

Ich glaube, Sie SQL und HQL ein wenig hier abmischen. In SQL, „Löschen“ Sie tatsächlich Aufzeichnungen und natürlich Hibernate tun wird letztlich das auch. Jedoch Hibernate / HQL wird von einer objektorientierten Mentalität entwickelt, so „löschen“ in diesem Zusammenhang bedeutet, dass Sie Objekte löschen, nicht Assoziationen. Typischerweise etwas tun Sie möchten, dass folgt:

Foo f = session.get(Foo.class, id);
f.getBars().clear();
session.merge(f);

Dies ruft das Objekt durch die id Sie angegeben, und entfernt alle Bar Verbände durch seine Sammlung zu löschen. Natürlich müssen Sie den Foo-Bars Verein in der richtigen Richtung für diese abgebildet arbeiten müssen.

Andere Tipps

Verbände allein Entfernen ist nicht möglich, mit HQL. Was Sie tun können, ist jedoch entweder:

A) Angenommen, Sie es für eine einzelne Foo tun und Ihre Kaskade entsprechend eingestellt ist, können Sie dieses Foo Beispiel klar seine Sammlung von bars laden und speichern.

B) Wenn Sie versuchen, bars von mehreren Foos löschen können Sie eine SQL-Abfrage statt HQL Karte

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top