Play Framework 2 Ebean 为字段指定默认值
Posted
技术标签:
【中文标题】Play Framework 2 Ebean 为字段指定默认值【英文标题】:Play Framework 2 Ebean specify default value for field 【发布时间】:2014-02-04 15:09:01 【问题描述】:我在 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))
;
【问题讨论】:
【参考方案1】:像这样使用自己的columnDefinition
:
@Column(columnDefinition = "integer default 2")
public Integer size = 2;
【讨论】:
太棒了,做到了!谢谢一堆。我以前见过(甚至使用过)列定义,但我认为它仅限于指定列的数据类型。完美答案!【参考方案2】:另一种选择是使用@PrePersist
标签包javax.persistence
。您可以使用@PrePersist
在您的bean 中装饰一个方法,并在调用Ebean.save 之前调用该方法。所以在这种情况下,下面的代码会将 size 的默认值设置为 2。
@PrePersist
protected void onCreate
if (this.size == null)
this.size = 2;
这种方法仅适用于 ORM (Ebean) 的上下文,显然不能直接用于 SQL。这种方法的优点是,在某些未知的奇怪 RDBMS 系统中,integer default 2
可能不是有效的列定义字符串。
【讨论】:
以上是关于Play Framework 2 Ebean 为字段指定默认值的主要内容,如果未能解决你的问题,请参考以下文章
数据库“默认”需要进化!尝试使用 play framework 2.7.0 和 Ebean 连接到 MySQL 时
Play Framework - Ebean - 没有为类“类名”注册 ScalarType
获取使用 Ebean 在 Play Framework 中保存的最新更新行