2012-04-24 13 views
6

Sto provando a utilizzare l'ereditarietà con ORMLite e non riesco a capire se è supportato o meno dalla documentazione e dalla ricerca di google.Come annotare correttamente le classi di ereditarietà usando ORMLite?

Quello che voglio fare è avere

public abstract class Person{ 
    public int id; 
    public String name; 
} 

public class Student extends Person{ 
    public String school; 
    public String year; 
    // other student stuff 
} 

public class Teacher extends Person{ 
    public String title; 
    // other teacher stuff 
} 

Quello che non riesco a capire (ammesso che sia supportato) è il modo di annotare le 3 classi per ORMLite.

Ho solo bisogno di annotare le classi concrete con @DatabaseTable(tableName = "Student") o ho bisogno anche della classe astratta?

continuo a ricevere errori come:

04-24 10: 18: 30,857: E/AndroidRuntime (30495): causato da: java.lang.RuntimeException: java.sql.SQLException: Campo sconosciuto ' nome' dal cursore SQLite di Android, non in: [anno, scuola]

risposta

7

il @DatabaseTable annotazione è necessaria solo sulle Student o Teacher tabelle e non sarebbe stato usato se fosse sulla classe Person base.

Ciò che è necessario è un'annotazione @DatabaseField nei campi id e name in Person. Per esempio:

public abstract class Person{ 
    @DatabaseField(generatedId = true) 
    public int id; 
    @DatabaseField 
    public String name; 
} 

ORMLite dovrebbe percorrere la gerarchia delle classi e tutti i campi dalla classe di base dovrebbero essere inclusi nelle tabelle Student e Teacher. Se modifichi la tua domanda per mostrare lo @DatabaseField o altre annotazioni, posso commentare di più.

+0

Grazie, questo ha risposto alla mia domanda anche se ORMLite avrebbe funzionato o meno per questo scenario. – srowley

1

Ok per quello ma ora, come implementare, in questo esempio, una quarta classe contenente uno List<AbstractPerson>?

ho la mia domanda precisa:

public class ClassRoom { 
    @ForeignCollectionField(foreignFieldName="asYouWant") 
    public Collection<Person> peoples; 
} 

peoples.add(new Student()); 
peoples.add(new Teacher()); 
peoples.add(new Student()); 

perché quando ormlite cercherà di accedere popoli come:

for (Person person : classRoom.peoples) 
{ 
    if (person.getType() == Student) 
     //do stuff 
    else if (person.getType() == Student) 
     //do other stuff 
} 

Non sarà in grado di ottenere PersonDao perché non esiste (abstract) ... Ricevo tutto il mio database funzionalizzato con buone Id e relazioni, è solo una domanda di accesso ai dati?

Problemi correlati