你好,我有类似的东西
@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);
}
首先。该表是按照我的意愿创建的,这是可以的,但我有两个问题
首先,我无法做出像这样的事情
User user = new User();
user.name = "Dawid";
user.save();
我不能这样做因为我得到的错误是dtype不能为null但是我无法设置它(或者我只是不知道该怎么做)
第二件事是,如果我从db添加用户我无法通过id获取他,当我这样做时,我得到sql错误导致where clausule看起来像这样
WHERE t0. AND t0.id = 1
你可以看到有t0。在点之后没有任何东西,这会破坏一切,我不知道它在做什么
答案 0 :(得分:7)
有关信息,请不要使用User
作为表名,因为它是许多数据库服务器中的关键字:
@Entity
@Table(name = "myUserTable")
public class User extends Person {
...
}
但这不是你的问题。 AFAIK,Ebean仅支持SINGLE_TABLE
策略,因此您必须使用此策略,并且可以使用dtype
注释在子类上指定鉴别器(即@DiscriminatorValue
)名称:< / p>
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class Person extends Model {
...
}
@Entity
@DiscriminatorValue("aUser")
public class User extends Person {
...
}