Play Framework - 如何共享表?

时间:2014-11-30 13:29:02

标签: java playframework ebean

我使用Play Framework 2.3进行演进,我想在同一张桌子上使用两种不同的模型。问题是Play总是为两个模型生成两次相同的表,这会在应用脚本时出现问题。

也许我完全错了,我应该采用另一种方法,但现在我认为这是正确的方法。我必须将用户模型作为Json返回。经过身份验证的用户应该从表中获取所有字段,未经过身份验证的用户应该获得同一个表的限制版本。

我已经在网上搜索了解决方案,并没有帮助我解决这个问题。我尝试使用@MappedSuperClass,但这也没有用。

@Entity
@Table(name="users")
public class User extends Model
{
    @Id
    public Long id;
    public Long userName;
}

@Entity
public class AuthUser extends User
{
    public Long email;
}

以上引导Play来创建:

create table users (
  id                        bigint auto_increment not null,
  user_name                 varchar(255),
  constraint pk_users primary key (id))
;

create table users (
  id                        bigint auto_increment not null,
  user_name                 varchar(255),
  email                     varchar(255),
  constraint pk_users primary key (id))
;

如何让Play识别两个模型共享同一个表?

非常感谢您提前, 索拉诺

1 个答案:

答案 0 :(得分:0)

你必须正确设置继承,我专门为在Github上展示这个来创建了一个样本,

在示例中,Content model是超类,仔细查看那里使用的注释。

它由NewsPostVideo进行了扩展,因此它们使用相同的表格,如果需要,偶尔会添加其他字段(例如视频中的videoPath模型)

一些重要提示,有助于节省时间:

  • 使用单个非camelcase名称作为鉴别字段,通常dtype是可以的。否则,您在访问鉴别器值时会遇到麻烦。
  • 每个模型必须声明它自己的finder(根据Ebean输入)所以它还需要重复@Id字段