一尘不染

在Android中使用ORMLite持久保存Collection类

java

我有两个如下的类设置。当我需要注释什么东西作为外国收藏时,我什么时候不需要,我感到困惑。这听起来也很愚蠢,但是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;
    }
}

阅读 212

收藏
2020-12-03

共1个答案

一尘不染

@罗伯特是正确的。当hibernate持久化一个集合(甚至一个数组)时,它会使用带有外部ID的隐藏的多余表(换句话说,就是隐藏的外部集合)来实现。ORMLite尝试遵守KISS原则,因此您是否“手工”定义了国外藏品。

我添加了有关存储集合的更多详细信息。

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


这意味着您不能持久化Integer类型,因为没有外部标识符。另外,您的代码可以定义外部集合Collection<Order>ForeignCollection<Order>。任一个都会设置为ForeignCollection。ORMLite不支持列表或其他集合类型。

2020-12-03