我在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))
;
答案 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系统中的有效列定义字符串的意义上,这是更加数据库中立的。