Сохранение класса Collection с ORMLite в Android - PullRequest
8 голосов
/ 08 июня 2011

У меня есть два класса настройки, как показано ниже.Меня смущает, когда мне нужно что-то аннотировать как иностранную коллекцию, а когда нет.Это также может показаться глупым, но нигде в документации ORMLite не говорится, разрешена ли не иностранная коллекция.Что если у меня есть список int с, который автоматически помещается в Integer с?могу ли я просто сохранить это, используя стандартный @DatabaseField выше Collection?Иностранная коллекция, согласно ORMLite, также должна иметь обратную ссылку, чтобы она работала (ссылка на родителя, учитывая один-на-один объект).В приведенном ниже примере я предполагаю, что вы должны аннотировать myBList как чужую коллекцию, а также делать myA сторонним объектом, но как вы можете обработать myStringList?

Я видел пример кода здесьно он не отвечает на мои вопросы: http://ormlite.com/docs/examples

public class A {

    private Set<B> myBList = new HashSet<B>();
    private List<String> myStringList = new ArrayList<String>();
    private long id;    
    public A(){}

    public Set<B> getMyBList() {
        return myBList;
    }
    public void setMyBList(Set<B> myBList) {
        this.myBList = myBList;
    }
    public List<String> getMyStringList() {
        return myStringList;
    }
    public void setMyStringList(List<String> myStringList) {
        this.myStringList = myStringList;
    }
    public void setId(long id){
        this.id = id;
    }

    public long getId(){
        return id;
    }
}

public class B {
    private int myInt;
    private String myString;
    private A myA;
    private long id;

    public B(){}

    public A getMyA(){
         return myA;
    }
    public A setMyA(A a){
        myA = a;
    }

    public int getMyInt() {
        return myInt;
    }
    public void setMyInt(int myInt) {
        this.myInt = myInt;
    }
    public String getMyString() {
        return myString;
    }
    public void setMyString(String myString) {
        this.myString = myString;
    }

    public void setId(long id){
        this.id = id;
    }

    public long getId(){
        return id;
    }
}

Ответы [ 2 ]

9 голосов
/ 08 июня 2011

@ Роберт прав.Когда hibernate сохраняет коллекцию (или даже массив), он делает это со скрытыми дополнительными таблицами с внешними идентификаторами - другими словами, скрытыми сторонними коллекциями.ORMLite пытается придерживаться принципа KISS, поэтому вы вместо этого определяете иностранные коллекции «вручную».

Я добавил дополнительные сведения о хранении коллекций.

http://ormlite.com/docs/foreign-collection


Это означает, что вы не можете сохранить тип Integer, потому что не существует чужого идентификатора.Также ваш код может определять иностранную коллекцию Collection<Order> или ForeignCollection<Order>.Любой из них будет установлен с ForeignCollection.ORMLite не поддерживает списки или другие типы коллекций.

0 голосов
/ 24 июля 2015

Если вы хотите сохранить коллекцию (например, ArrayList) объектов в ORMLite, проще всего это:

@DatabaseField(dataType = DataType.SERIALIZABLE)
private SerializedList<MyObject> myObjects;

и получить мой список объектов:

public List<MyObject> getMyObjects() {
  return myObjects;
}
...