2016-02-17 7 views
0

ПродуктORMLite не знает, как хранить интерфейс java.util.List

@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. 

я уже читал в других сообщениях о теге внешнего, но моя позиция не является внешним ключом.

ответ

0

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 выдает исключение.

0

Я использовал пользовательский Serializable Object, как опубликовал 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;