Nehmen wir an, ich habe ein paar Entitäten, die wie folgt aussehen:
@Entity
public class Person extends Model {
@ManyToOne
@JoinColumn(name = "fooId", nullable = false)
public Foo foo;
...
}
@Entity
public class Foo extends Model {
@ManyToOne
@JoinColumn(name = "barId", nullable = false)
public Bar bar;
...
}
Nehmen wir an, ich möchte alle Personen finden, die nicht mit einer bestimmten Instanz von Bar verbunden sind:
Person.find("foo.bar <> ?", someInstanceOfBar).fetch();
Das funktioniert einwandfrei und liefert alle Personen, die ich erwarten würde.
Wenn ich jedoch die obige Anweisung leicht abändere, um alle Personen zu löschen, die nicht mit Bar verbunden sind:
Person.delete("foo.bar <> ?", someInstanceOfBar);
Ich erhalte die folgende Meldung:
PersistenceException occured : org.hibernate.exception.SQLGrammarException: could not execute update query
...
Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "DELETE FROM PERSON CROSS[*] JOIN FOO FOO1_ WHERE BARID<>? ";
Irgendwelche Ideen, warum die Suche nach Personen die richtige Anzahl von Zeilen zurückgeben würde, aber das Löschen von Personen mit der gleichen Where-Klausel zu einer Ausnahme führen würde?