2

インターハイトされたクラスとの関係を構築する機会があるのだろうか。次の例は、関係 "person" が存在しないというエラーをスローするため、機能しません。Person クラスの上に DatabaseTable タグを配置しても機能しません。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

0

返事が遅くなってごめん。

残念ながら、これはうまくいきません。このSchoolクラスは、persons外部コレクション フィールドを構築するために 2 つの異なるテーブルをクエリする必要があります。

You could accomplish this with a Person table with the Student and Teacher having a foreign Person field, but ORMLite has no way to do this for you automagically.

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

Then Person would not be abstract and there would be a Person table. That's probably how Hibernate does it under the covers.

于 2012-09-26T22:22:51.277 に答える