2017-11-10 2 views
1

Ich versuche, einige der Arbeit zu minimieren, die ich tun muss, indem ich meine Nachschlagetabellen "generiere". Sie werden alle int id als Primärschlüssel haben, aber ich möchte auch, dass sie nach ihrem "Typ" durchsucht werden können (was auch immer der Enum-Wert ist). Hier ist die abstrakte LookupRecord KlasseWie Generic Enum als Ormlite-Spalte zu machen

public abstract class LookupRecord<T extends Enum<T>> extends DatabaseRecord { 
    public static final String TYPE_FIELD_NAME = "type"; 

    @DatabaseField(unique = true, columnName = TYPE_FIELD_NAME) 
    private T type; 

    public LookupRecord(T type) { 
     this.type = type; 
    } 

    public T getType() { 
     return type; 
    } 
} 

Also, wenn ich versuche, das Dao für jede der Nachschlagetabellen ich die folgende Fehlermeldung erhalten zu initialisieren:

java.sql.SQLException: Field FieldType:name=type,class=LookupRecord improperly configured as type [email protected]

Antwort

0

They are all going to have int id as primary key but I'd also like them to have the ability to be searched by their "type" (whatever the Enum value is).

@DatabaseField(unique = true, columnName = TYPE_FIELD_NAME) 
private T type; 

Ja das nicht geht wegen type erasure arbeiten. Wenn ORMLite geht, um die fragliche Klasse mithilfe von Reflektion zu untersuchen, wird versucht, die Enum-Konstanten für dieses Feld zu suchen. Alles was es bekommt, ist der Typ Enum und nicht die konkrete konkrete Enum-Klasse aus der Unterklasse. Leider ist diese Fehlermeldung weniger als hilfreich, dies zu zeigen.

Wenn die Klasse konfiguriert ist, weiß sie nur, dass es sich um eine Enumeration handelt. Es weiß nicht welche enum es ist, so kann es das Feld nicht korrekt konfigurieren oder Instanzen des Objekts mit einem entsprechenden enum-Feld dort erstellen.

+0

Danke für die Antwort. Ich hatte das Gefühl, ich habe auf das Unmögliche geschossen und meine Einstellung geändert. – SirBeastalot