Сохранение класса Collection с ORMLite в android

У меня есть два класса, как показано ниже. Я смущен, когда мне нужно что-то аннотировать как иностранную коллекцию, а когда нет. Это также может звучать глупо, но нигде в документации ORMLite не говорится о том, разрешена ли не-иностранная коллекция. Что делать, если у меня есть список int, который получает autoboxed в Integer s? могу ли я просто сохранить это, используя стандартный @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;
    }
}

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

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

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


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

9
ответ дан 08 июня '11 в 14:14
источник

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

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

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

public List<MyObject> getMyObjects() {
  return myObjects;
}
0
ответ дан 24 июля '15 в 1:16
источник