7

我在 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))
;
4

2 回答 2

12

像这样使用自己columnDefinition

@Column(columnDefinition = "integer default 2")
public Integer size = 2;
于 2014-02-04T16:09:06.680 回答
0

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

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

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

于 2016-05-24T18:31:51.110 回答