Фильтр Objectify не работает, кроме выборки по id - PullRequest
0 голосов
/ 30 июня 2019

Первоначально моей задачей было отфильтровать записи по дате, для которой я написал приведенный ниже запрос, который не дал результата, хотя у меня есть 4 записи в хранилище данных, которое удовлетворяет условию

    ObjectifyService.run(() -> ObjectifyService.ofy().cache(false).load().type(SomeClass.class).filter("createdDate <", date.toString())
                .list());

Примечание. У меня есть индекс для createDate.

Позже, просто хотел проверить, действительно ли он что-то извлекает, я написал извлекать все записи, которые не дают результатов

    ObjectifyService.run(() -> ObjectifyService.ofy().cache(false).load().type(SomeClass.class).list());

У меня есть метод, который запрашивает идентификатор и сейчас работает только.

    ObjectifyService.run(() -> ObjectifyService.ofy().cache(false).load().type(SomeClass.class).id("someId").now());

Не могу понять, в чем здесь проблема.

Ниже находится сама сущность

    @Entity(name = "SomeClass")
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @Subclass
    public class SomeClass implements Serializable {

        @Id
        private String id;
        private int importId;
        private String name;
        private String value;
        private Date lastModified;
        @Index
        private Date createdDate;
        private List<SomeOtherClass> someOtherClass;

    }

Мне кажется, это как-то связано с аннотацией @subclass. Это так?

1 Ответ

1 голос
/ 30 июня 2019

Ваша проблема здесь:

filter("createdDate <", date.toString())

Вы фильтруете поле даты по строковому значению.Поля даты должны быть отфильтрованы по значениям даты.Отбросьте toString(), и вы увидите ожидаемое поведение.

Отсутствие схемы хранилища данных означает, что вы не получите ошибок проверки типов при сравнении значений различных типов.Фактически, вы можете сохранить некоторые объекты с полем как String, а некоторые объекты с полем как Date (обычно это плохая идея).Хранилище данных имеет абсолютный порядок;все строки (независимо от их содержимого) больше всех дат, поэтому ваш фильтр ничего не возвращает.

...