Ошибка "Criteria objects cannot be created directly on components. Create a criteria on owning entity and use a dotted property to access component property" возникает при попытке создания дочернего элемента Criteria для поля, представляющего не ассоциацию, а составной ключ:
Criteria childCriteria = criteria.createCriteria("id");
, где поле id класса, которому соответствует объект criteria, ссылается на объект составного ключа.
В случае составных ключей, нет необходимости создания дочерних объектов Criteria, накладывать условия на поля составного ключа или выполнять по ним сортировку можно просто используя точку:
criteria.addOrder(Order.asc("id.timestamp"));
criteria.add(Restrictions.gt("id.timestamp",new Date()));
Кстати, создавать псевдонимы через criteria.createAlias для поля составного ключа тоже нельзя, т.к. createAlias предполагает выполнения JOIN`а в БД, тогда как составной ключ не требует никаких объединений т.к. является просто группировкой полей в отдельный объект.
ogromnoe spasibo, helped a lot!
ОтветитьУдалить