Я пытаюсь построить Критерии, составленные из различных компонентов. Представьте себе приведенные ниже классы.
class Thing {
Inner inner;
String x;
}
class User {
Id; // mapped as id.
String first; // indexed columns etc
String last;
}
Я хотел бы создать запрос (он же Criterion) для вещей, где User.first=@1 и User.last=@2. Я могу легко добиться этого, создав для пользователя подкритерии, а затем добавив к нему ограничения.
Critera root = ...
root.add( Restrictions.eq( "xxx", @2 ));
Criteria user = root.createCritera("user");
user.add( Restrictions.eq("first", @1));
...etc
Однако я не могу создать AND для свойства вещи и пользователя, используя код, подобный ...
Critera root = ...
root.add( Restrictions.and( Restrictions.eq("user.first", @1), Restrictions.eq("thing.x", @2));
Выдается исключение QueryException, что user.first не является ассоциацией. Необходимость вручную создавать критерии перед добавлением ограничения, кажется, не обязательна, но все же есть. Попытки использовать псевдоним во второй форме также не удаются.