Play Framework 2 Ebean指定字段的默认值

时间:2014-02-04 15:09:01

标签: java ebean playframework-2.2 playframework-evolutions

我在Play Framework 2中有一个简单的模型,如果执行INSERT时没有提供,我想指定一个默认值插入指定的INT列。

型号:

@Entity
@Table(name = "DashboardOptions", schema = "dbo")
public class DashboardOptions extends Model implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    public Long id;

    @Basic(optional = false)
    @Column(name = "userId")
    public Long userId;

    @Column(name = "chartType")
    public String chartType;

    public String name;

    public Integer size = 2;

我希望默认情况下size列填充2,但是,如果我指定上面的默认值,我的数据库演变不会反映这一点:

create table dbo.DashboardOptions (
id                        numeric(19) identity(1,1) not null,
userId                    numeric(19) not null,
chartType                 varchar(255),
name                      varchar(255),
size                      integer,
constraint pk_DashboardOptions primary key (id))
;

我期望看到的是:

create table dbo.DashboardOptions (
id                        numeric(19) identity(1,1) not null,
userId                    numeric(19) not null,
chartType                 varchar(255),
name                      varchar(255),
size                      integer default 2,
constraint pk_DashboardOptions primary key (id))
;

2 个答案:

答案 0 :(得分:12)

像这样使用自己的columnDefinition

@Column(columnDefinition = "integer default 2")
public Integer size = 2;

答案 1 :(得分:0)

另一种选择是使用@PrePersist标记包javax.persistence。您可以使用@PrePersist在bean中装饰一个方法,并在Ebean.save调用之前调用该方法。所以在这种情况下,以下代码会将size的默认值设置为2。

@PrePersist
protected void onCreate {
  if (this.size == null)
          this.size = 2;
}

此方法仅适用于ORM(Ebean)的上下文,显然不能直接与SQL一起使用。这种方法的优点是,在integer default 2可能不是某些未知的奇怪RDBMS系统中的有效列定义字符串的意义上,这是更加数据库中立的。