У меня есть служба REST, которую я вызываю из своего приложения, которое тянет объект JSON как byte[]
, который затем превращается в красивую вложенную коллекцию объектов - все это бит отлично работает. То, что я тогда хочу сделать, это сохранить эти объекты в хранилище SQLite с помощью OrmLite и что там, где все начинает разрушаться, поскольку, как я понимаю, OrmLite не сохраняет автоматически вложенные объекты.
Для простоты, разрешите мою фактическую функциональность и пусть мои объекты будут смоделированы просто так:
@DatabaseTable(tableName = "parents")
public class Parent {
@DatabaseField(id=true)
private String name;
@ForeignCollectionField
// have to use Collection here because needs to be compatible with Jackson
private Collection<Child> children;
/* Getters and setters go here */
}
@DatabaseTable(tableName = "children")
public class Child {
@DatabaseField(id=true)
private String name;
@DatabaseField(foreign=true)
private Parent parent;
/* Getters and setters go here */
}
Что происходит при добавлении создания нового объекта Parent
в базу данных с моим соответствующим объектом parentDao
, дети не сохраняются вместе с родителем.
Это распространенный вопрос, который был поднят до этого, есть некоторые другие вопросы по SO, которые очень похожи на этот, особенно "Сохранение вложенных посторонних объектов с ORMLite на Android" в ответ на то, что Грей предлагает создать дочерний объект перед родителем, который будет отлично работать для создания моих POJO вручную.
Тем не менее, я еще не видел ответа, какие факторы в случаях, когда объекты генерируются другой библиотекой (в данном случае Jackson). Не углубляясь в глубину Джексонской десериализации (которая устраняет все преимущества своей простоты) и пытается заставить Джексона создать дочерние объекты, а затем добавить их к родителям (если я не пропущу что-то, и это проще, чем кажется)? это не кажется особенно привлекательным решением в данном конкретном случае.
Кроме того, существуют другие решения, которые включают добавление дополнительных аннотаций к внешнему ключу, которые, по-видимому, подходят для работы с одиночными дочерними объектами, но эти аннотации недоступны при работе с @ForeignCollectionField
и их соответствующими Collection
s.