Запрос с помощью play framework возвращает связанные таблицы без моего запроса
У меня есть следующие модели в игровом фреймворке.
@Entity
public class Parent extends Model {
@Id
public Long id;
public String name;
public List<Child> children = new ArrayList<Child>();
}
@Entity
public class Child extends Model {
// Entity 2
@Id
public Long id
public String name;
@ManyToOne
public Parent parent;
}
Выполнение следующего запроса дает мне больше информации, чем мне нужно.
toJson(Child.find.all());
В качестве примера я получаю всех детей, а также их родителей и родительские атрибуты и любую другую смежную информацию.
Я пробовал установить fetch=FetchType.LAZY
, но это не имеет значения.
Может ли кто-нибудь помочь?
3 ответа:
Ebean имеет встроенную поддержку JSON, и вы можете использовать ее, если хотите точно контролировать части графа объектов, включаемые в JSON:
JsonContext jsonContext = Ebean.json(); JsonWriteOptions options = JsonWriteOptions.parsePath("id,name"); String json = jsonContext.toJson(list2, options);
И в качестве альтернативы вы можете применить PathProperties как к запросу, так и к json, например:
PathProperties pathProperties = PathProperties.parse("id,name"); query.apply(pathProperties); // fetch only id and name List<App> list3 = query.findList(); // json output only id and name JsonWriteOptions options2 = new JsonWriteOptions(); options2.setPathProperties(pathProperties); String json2 = jsonContext.toJson(list3, options2);
. Отметим, что Ebean 4.3 была поддержка JSON это с учетом использования Джексон ядра для парсинга и генерации (так это, используя Джексон под капотом). Вы используете Play so в настоящее время застрял на старой версии Ebean so вместо использования запроса.применять() вы бы использовали свойства пути.применить (запрос) я думаю.
Относительно @JsonIgnore ... очевидно, что разные варианты использования требуют разных JSON, поэтому эта функция существует в Ebean (когда вы получаете вариант использования, который должен включать Родительский like)
PathProperties pathProperties = PathProperties.parse("id,name,parent(id,name)"); ...
Метод Джексона toJson() всегда извлекает все данные при сериализации объектов Ebean, поэтому он может быть реальным
performance killer
, что обсуждалось мое предложение использовать некоторый выделенный объект (не хранящийся в БД) и заполнять его только требуемыми данными из "исходного" объекта.Проверьте другой ответ, который описывает этот подход .