2016-05-20 3 views
0

У меня есть простой класс @Entity со стандартным идентификатором @Id Long и несколькими полями. Одним из таких полей является Карта.Список запросов объектов со встроенным объектом с использованием objectify

@Entity 
public class MyEntity{ 

@Id Long id; 

@Index String fieldOne; 
@Unindex int fieldTwo; 
@Unindex int fieldThree; 
@Unindex Map<String, MyPojo> map = new HashMap<>(); 
} 

Из того, что я собрал, Objectify рассматривает эту карту так, как если бы она была встроенной сущностью. Когда я запрос для получения списка с помощью:

List<MyEntity> list = ofy().load().type(MyEntity.class).filter("fieldOne =", fieldList).list(); 

запрос выполняется нормально, но когда я пытаюсь сделать что-нибудь со списком я получаю это исключение

java.util.ArrayList не может быть приведен к ком .google.appengine.api.datastore.EmbeddedEntity

Это исключение также вызывается, когда я прикасаюсь запрос после того, как с помощью этих методов, а также:

Map<Long, MyEntity> query = ofy().load().type(MyEntity.class).ids(idsList); 

или

Map<Key<MyEntity>, MyEntity> query= ofy().load().keys(iterableOfKeys); 

Сейчас в некоторых тестирования я обнаружил, что если я изменю свою карту

@Unindex Map<String, Integer> map = new HashMap<>(); 

все отлично работает. Все вышеперечисленные запросы работают, и я могу повторять их и т. Д. И т. Д. Итак, мой вопрос - что мне не хватает? Я пытаюсь все это неправильно или есть лучший способ обойти это?

Я использую последнюю версию Objectify 5.1.12.

Благодаря

+0

Можете ли вы опубликовать полную стек и определение MyPojo? – stickfigure

+0

После того, как я не решил, я построил работу, чтобы двигаться дальше. После просмотра вашего комментария я вернулся и вернул это поле, чтобы использовать Map , чтобы он снова не смог собрать стек, и это не так. Сейчас все работает. Я очень смущен. До этого у меня было поле карты как индексный список, и возникли проблемы, когда я изменил его на Unindex Map. Возможно, Индексация вызвала проблему, и для изменения индекса потребовалось несколько часов. Теперь, когда карта работает, я не могу получить MyPojo из JsonMap, возвращенного на стороне клиента. Кастинг не работает.Любые мысли – foolioJones

+0

Я искренне не понимаю, что вы просите. Когда вы задаете вопросы, расскажите о шагах, которые вы предприняли, доводя до этой проблемы и разместив полные стеки. Если вы сохранили данные в своей базе данных, которые не находятся в «форме» ваших классов Java, вы можете иметь всевозможные проблемы. – stickfigure

ответ

-1

Если бы тот же вопрос, когда я изменил структуру существующего объекта и запрашивается его после изменения.

+0

Как этот ответ отвечает на вопрос? –

0

Не вдаваясь в определение класса MyPojo Я предполагаю, что это не определяет, как @Entity Из документации объективировать:

Значение может быть любого типа, который может быть сохранен как поле, в том числе основных типов, встроенные объекты, а также коллекции.

Предполагая, что это ваш MyPojo он должен выглядеть следующим образом:

@Entity 
    class MyPojo { 
     String firstName; 
     String lastName; 
     Integer age; 
    } 

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