2014-02-04 2 views
7

У меня есть простая модель в Play Framework 2, и я хотел бы указать значение по умолчанию, которое нужно вставить в столбец INT, если ни один из них не указан при выполнении INSERT.Play Framework 2 Ebean указать значение по умолчанию для поля

Модель:

@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)) 
; 

ответ

12

Использовать собственные columnDefinition так:

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

Блестящий, что сделал! Огромное спасибо. Раньше я видел (и даже использовал) определение столбцов, но я думал, что он ограничен, указав ТОЛЬКО тип данных столбца. Отличный ответ! –

0

Другой вариант заключается в использовании @PrePersist тегов пакета javax.persistence. вы можете иметь метод, украшенный в вашем компоненте @PrePersist, и этот метод вызывается перед вызовом Ebean.save. так что в этом случае следующий код будет установить значение по умолчанию размер до 2.

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

Этот подход применим только в контексте ОРМ (Ebean) и, очевидно, не будет работать непосредственно с SQL. Преимущество этого метода состоит в том, что это больше нейтраль базы данных в том смысле, что integer default 2 не может быть допустимой строкой определения столбцов в некоторых неизвестных странных системах РСУБД.

 Смежные вопросы

  • Нет связанных вопросов^_^