2012-04-24 17 views
6

Estoy tratando de usar la herencia con ORMLite y no puedo resolver si es compatible o no al mirar la documentación y buscar en Google.¿Cómo puedo anotar correctamente las clases de herencia usando ORMLite?

Lo que quiero hacer es tener

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 
} 

Lo que no puedo hacer ejercicio (asumiendo que es compatible) es la forma de anotar las 3 clases de ORMLite.

¿Solo tengo que anotar las clases concretas con @DatabaseTable(tableName = "Student") o también necesito la clase abstracta?

me dan errores como:

04-24 10: 18: 30.857: E/Android Runtime (30495): Causado por: java.lang.RuntimeException: java.sql.SQLException: Campo desconocido ' nombre' desde el cursor sqlite Android, no en: [año, la escuela]

Respuesta

7

el @DatabaseTable anotación sólo es necesario en los Student o Teacher tablas y no se utilizaría si estaba en la clase Person base.

Lo que necesitas es tener una anotación de @DatabaseField en los id y name campos en Person. Por ejemplo:

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

ORMLite debe caminar la jerarquía de clases y todos los campos de la clase base deben ser incluidos en los Student y Teacher tablas. Si editas tu pregunta para mostrar el @DatabaseField u otras anotaciones, puedo comentar más.

+0

Gracias, esto respondió mi pregunta también si ORMLite funcionaría o no para este escenario. – srowley

1

Ok para eso pero ahora, ¿cómo implementar, en ese ejemplo, una cuarta clase que contiene un List<AbstractPerson>?

que precisa mi pregunta:

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

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

porque cuando ormlite tratarán de acceder a los pueblos como:

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

No será capaz de obtener personDAO porque no existe (resumen) ... Obtengo toda mi base de datos funcional con buenas Id y relación, es solo una pregunta de acceso a datos?

Cuestiones relacionadas