2012-04-24 10 views
6

Próbuję użyć dziedziczenia z ORMLite i nie mogę się dowiedzieć, czy jest obsługiwane, czy nie, patrząc na dokumentację i google.Jak poprawnie adnotować klas dziedziczenia przy użyciu ORMLite?

Co chcę zrobić, to mieć

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 
} 

Co nie mogę pracować (zakładając, że jest obsługiwany) jest jak adnotacje na 3 klasy dla ORMLite.

Czy muszę tylko opisywać konkretne klasy za pomocą @DatabaseTable(tableName = "Student"), czy też potrzebuję również klasy abstrakcyjnej?

Trzymam błędy uzyskiwanie jak:

04-24 10: 18: 30,857: E/Android Runtime (30495): Spowodowany przez: java.lang.RuntimeException: java.sql.SQLException: Nieznany pole ' Nazwa”z Androidem sqlite kursora, a nie: [rok, szkoła]

Odpowiedz

7

@DatabaseTable adnotacja jest konieczne tylko na Student lub Teacher tabel i nie zostaną wykorzystane, jeśli to było na klasy Person bazowej.

Wymagana jest adnotacja @DatabaseField na polach id i name w Person. Na przykład:

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

ORMLite powinno chodzić hierarchii klasa oraz wszelkie pola z klasy bazowej powinny być zawarte w Student i Teacher tabelach. Jeśli edytujesz pytanie, aby wyświetlić @DatabaseField lub inne adnotacje, mogę dodać więcej komentarzy.

+0

Dzięki temu odpowiedziałem na pytanie, czy ORMLite będzie działało w tym scenariuszu. – srowley

1

OK, ale teraz, jak zaimplementować w tym przykładzie czwartą klasę zawierającą List<AbstractPerson>?

I precyzyjny moje pytanie:

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

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

bo gdy ormlite będzie próbował uzyskać dostęp ludy jak:

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

To nie będzie w stanie uzyskać personDAO ponieważ nie istnieje (streszczenie) ... Dostaję całą moją bazę funkcjonalną z dobrymi ID i relacjami, to tylko pytanie o dostęp do danych?

Powiązane problemy