Допустим, у меня есть несколько сущностей, которые выглядят так:
@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;
...
}
Теперь, скажем, я хочу найти всех людей, которые не связаны с конкретным экземпляром Bar:
Person.find("foo.bar <> ?", someInstanceOfBar).fetch();
Это работает нормально и возвращает всех людей, которых я ожидал.
Однако, если я слегка подправлю приведенное выше утверждение, удаляю всех людей, не связанных с Bar:
Person.delete("foo.bar <> ?", someInstanceOfBar);
Я получаю следующее:
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<>? ";
Любые идеи, почему поиск Людей вернул бы правильное количество строк, но удаление Людей с использованием того же предложения where приведет к исключению?