2012-04-24 33 views
6

Tôi đang cố gắng sử dụng thừa kế với ORMLite và tôi không thể làm việc nếu nó được hỗ trợ hay không nhìn vào tài liệu và googling.Làm cách nào để chú thích đúng các lớp thừa kế bằng ORMLite?

Những gì tôi muốn làm là có

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 
} 

Những gì tôi không thể làm việc ra (giả sử nó được hỗ trợ) là làm thế nào để chú thích 3 lớp dành cho ORMLite.

Tôi chỉ cần chú thích các lớp cụ thể với @DatabaseTable(tableName = "Student") hoặc tôi có cần lớp trừu tượng không?

tôi tiếp tục nhận được lỗi như:

04-24 10: 18: 30,857: E/AndroidRuntime (30.495): Nguyên nhân: java.lang.RuntimeException: java.sql.SQLException: Trường không xác định ' tên' từ con trỏ sqlite Android, không phải trong: [năm, trường]

Trả lời

7

các @DatabaseTable chú thích chỉ cần thiết trên Student hay Teacher bảng và sẽ không được sử dụng nếu nó đã được trên lớp Person cơ sở.

Những gì bạn cần có là chú thích @DatabaseField trên các trường idname trong Person. Ví dụ:

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

ORMLite nên đi bộ hệ thống phân cấp lớp và bất kỳ lĩnh vực từ lớp cơ sở nên được bao gồm trong các bảng StudentTeacher. Nếu bạn chỉnh sửa câu hỏi của mình để hiển thị @DatabaseField hoặc các chú thích khác, tôi có thể nhận xét thêm.

+0

Cảm ơn, điều này đã trả lời câu hỏi của tôi cũng như liệu ORMLite có hoạt động cho trường hợp này hay không. – srowley

1

Ok cho điều đó nhưng bây giờ, làm thế nào để thực hiện, trong ví dụ đó, một lớp thứ tư có chứa một List<AbstractPerson>?

tôi chính xác câu hỏi của tôi:

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

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

vì khi ormlite sẽ cố gắng truy cập vào các dân tộc như:

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

Nó sẽ không thể để có được personDAO vì nó không tồn tại (trừu tượng) ... Tôi nhận được tất cả các chức năng cơ sở dữ liệu của tôi với Id tốt và mối quan hệ, nó chỉ là một câu hỏi truy cập dữ liệu?

Các vấn đề liên quan