Ist es möglich, ein ENUM-Feld in einer Klasse mit OrmLite beharrte haben?
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
?
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;