如何从抽象类中正确扩展类

时间:2013-01-07 20:44:17

标签: playframework-2.0 ebean

你好,我有类似的东西

@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。在点之后没有任何东西,这会破坏一切,我不知道它在做什么

1 个答案:

答案 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 {
...
}