Frage

Ich versuche, die folgende Klasse bestehen bleiben mit OrmLite :

public class Field {
    @DatabaseField(id = true)
    public String name;

    @DatabaseField(canBeNull = false)
    public FieldType type;
    ...
}

Die FieldType ist ein public enum. Das Feld, auf den type entsprechende Zeichenkette in SQLite (ist nicht enums unterstützen). Wenn ich versuche, es zu benutzen, ich die folgende Ausnahme erhalten:

INFO [main] (SingleConnectionDataSource.java:244) - Established shared JDBC Connection: org.sqlite.Conn@5224ee
Exception in thread "main" org.springframework.beans.factory.BeanInitializationException: Initialization of DAO failed; nested exception is java.lang.IllegalArgumentException: Unknown field class class enums.FieldType for field FieldType:name=type,class=class orm.Field
 at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:51)
 at orm.FieldDAO.getInstance(FieldDAO.java:17)
 at orm.Field.fromString(Field.java:23)
 at orm.Field.main(Field.java:38)
Caused by: java.lang.IllegalArgumentException: Unknown field class class enums.FieldType for field FieldType:name=type,class=class orm.Field
 at com.j256.ormlite.field.FieldType.<init>(FieldType.java:54)
 at com.j256.ormlite.field.FieldType.createFieldType(FieldType.java:381)
 at com.j256.ormlite.table.DatabaseTableConfig.fromClass(DatabaseTableConfig.java:82)
 at com.j256.ormlite.dao.BaseJdbcDao.initDao(BaseJdbcDao.java:116)
 at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:48)
 ... 3 more

Wie kann ich feststellen, OrmLite, Werte auf der Java-Seite sind von einem enum?

War es hilfreich?

Lösung

ORMLite können Aufzählungen bestehen entweder als VARCHAR enum-Name (default) :

// this saves it as a string in the database
@DatabaseField
OurEnum ourEnum;
...
private enum OurEnum {
    FIRST,
    SECOND, ;
}

Als Alternative können Sie die Ordnungs INTEGER .

// this saves it as an integer in the database
@DatabaseField(dataType = DataType.ENUM_INTEGER)
OurEnum ourEnum;

Auch wenn Sie können speichern die Ordnungs, die VARCHAR Name Version (das ist die Standardeinstellung) wird empfohlen, da die Ordnungs Wert ändern können, wenn Sie aus dem Enum Hinzufügen oder Entfernen von Einträgen.

Für beiden Aufzählungstypen können Sie eine unknownEnumName = "..." Feld , die mit Auf- und Abwärtskompatibilität hilft . Wenn die Datenbank einen unbekannten Wert für die Enum enthält dann das Objekt, das durch die DAOs wird diesen ENUM-Wert zurückgegeben wird.

@DatabaseField(unknownEnumName = "FIRST")
OurEnum ourEnum;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top