2

我想知道是否有机会与 interhited 类建立关系。下面的例子不起作用,因为它抛出了关系“人”不存在的错误。如果我将 DatabaseTable 标记放在 Person 类上方,它也不起作用。Ormlite 是否支持与继承对象的关系?

public abstract class Person{
    @DatabaseField(generatedId = true)
    public int id;
    @DatabaseField
    public String name;
    @DatabaseField(canBeNull = false, foreign = true)
    private School school;
 }

@DatabaseTable
 public class Student extends Person{
    @DatabaseField
    public String class;
    @DatabaseField
    public String year;
 }

 @DatabaseTable
 public class Teacher extends Person{
    @DatabaseField
    public String title;
 }

 @DatabaseTable
 public class School {
     @DatabaseField(generatedId = true)
     public int id;
     @ForeignCollectionField(eager = true)
     ForeignCollection<Person> persons;
 }
4

2 回答 2

4

试一试http://code.google.com/p/compot/。它仍处于测试阶段,但它专注于实体继承并且非常易于使用。

于 2012-11-21T11:11:15.057 回答
0

回复晚了非常抱歉。

不幸的是,这行不通。该类School必须查询 2 个不同的表来构建persons外部集合字段。

您可以使用具有和具有外部字段的Person表来完成此操作,但ORMLite无法自动为您执行此操作。StudentTeacherPerson

@DatabaseTable
public class Student {
    @DatabaseField
    public String class;
    @DatabaseField
    public String year;
    @DatabaseField(foreign = true)
    public Person person;
}

然后Person就不会abstract了,会有一张Person桌子。这可能就是 Hibernate 在幕后所做的。

于 2012-09-26T22:22:51.277 回答