4

こんにちは私はこのようなものを持っています

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Person extends Model {
@Id  
public int id;

public String name;

public String lastName;
}

@Entity
public class User extends Person {
public Date registrationDate;

@ManyToMany(mappedBy="holders")
public List<Loan> loans = new ArrayList<Loan>();

public static Finder<Integer, User> find = new Finder<Integer, User>(Integer.class, User.class);
}

初めに。テーブルは希望どおりに作成され、これは問題ありませんが、2つの問題があります

まず第一に、私はこのようなものを作ることができません

User user = new User();
user.name = "Dawid";
user.save();

私はそれを行うことができません。dtypeをnullにできないというエラーが発生しますが、設定できません(または、これを行う方法がわかりません)

2つ目は、dbからユーザーを追加すると、IDでユーザーを取得できないため、SQLエラーが発生し、where句が次のようになります。

WHERE t0. AND t0.id = 1

ご覧のとおり、t0が​​あります。ドットの後には何もありませんそしてこれはすべてを台無しにしますそして私はそれがそこで何をしているのか分かりません

4

1 に答える 1

7

User参考までに、多くのデータベースサーバーではキーワードであるため、テーブル名として使用しないでください。

@Entity
@Table(name = "myUserTable")
public class User extends Person {
...
}

しかし、それはあなたの問題ではありません。AFAIK、EbeanはSINGLE_TABLE戦略のみをサポートしているため、この戦略を使用する必要があり、アノテーションdtypeを使用してサブクラスの識別子(つまり)名を指定できます。@DiscriminatorValue

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class Person extends Model {
...
}

@Entity
@DiscriminatorValue("aUser")
public class User extends Person {
...
}
于 2013-01-07T20:55:36.513 に答える