【问题标题】:ORMLite does not know how to store interface java.util.ListORMLite不知道如何存储接口java.util.List
【发布时间】:2016-02-28 00:02:32
【问题描述】:

产品

@DatabaseTable
public class Product implements Serializable {
private static final long serialVersionUID = 1L;

public Product() {
    // TODO Auto-generated constructor stub
}

public Product(String originalId) {
    this.originalId = originalId;
}

@DatabaseField(id = true)
private String originalId;

...

@DatabaseField
private List<SkuInfo> skusInfo;

SkuInfo

public class SkuInfo implements Serializable {

private static final long serialVersionUID = 1L;
...
}

错误是:

java.lang.IllegalArgumentException: ORMLite does not know how to store interface java.util.List for field skusInfo. Use another class or a custom persister.

当我使用时:

@DatabaseField(dataType = DataType.SERIALIZABLE)
private List<SkuInfo> skusInfo;

错误变为:

java.lang.IllegalArgumentException: ORMLite does not know how to store interface java.util.List for field skusInfo. Use another class or a custom persister.

我已经在另一篇文章中读到过标签 Foreign 但我的项目不是外键。

【问题讨论】:

    标签: java ormlite


    【解决方案1】:

    我使用了一个自定义可序列化对象,如发布的here 并工作了。

    public class SerializableCollectionsType extends SerializableType {
        private static SerializableCollectionsType singleton;
        public SerializableCollectionsType() {
            super(SqlType.SERIALIZABLE, new Class<?>[0]);
        }
    
        public static SerializableCollectionsType getSingleton() {
            if (singleton == null) {
                singleton = new SerializableCollectionsType();
            }
            return singleton;
        }
        @Override
        public boolean isValidForField(Field field) {
            return Collection.class.isAssignableFrom(field.getType());
        }
    }
    

    产品

    @DatabaseField(persisterClass = SerializableCollectionsType.class)
    private List<SkuInfo> skusInfo;
    

    【讨论】:

      【解决方案2】:

      java.lang.IllegalArgumentException: ORMLite does not know how to store interface java.util.List for field skusInfo. Use another class or a custom persister.

      为了后代,您可以将其更改为 ArrayList,它实际上实现了 java.io.Serializable,因为这正是它正在寻找的。不幸的是,List 并没有让 ORMLite 抛出异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-04
        • 2019-02-07
        • 1970-01-01
        • 2020-10-10
        • 2023-04-09
        相关资源
        最近更新 更多