ebean java play框架中的约束没有反映在生成的sql中

时间:2016-08-03 05:22:35

标签: java sql sql-server playframework ebean

我在基于java的播放框架中使用ebean ORM,以下是我的模型

package models;

import java.util.*;
import javax.persistence.*;

import com.avaje.ebean.annotation.CreatedTimestamp;
import com.avaje.ebean.annotation.UpdatedTimestamp;

import play.db.ebean.*;
import play.data.validation.*;

@Entity 
@Table(name = "coupons")
public class Coupon extends com.avaje.ebean.Model {

    private static final long serialVersionUID = 1L;

    @Id
    private Long id;

    @Constraints.Required
    @Constraints.MaxLength(80)
    @Constraints.MinLength(10)
    private String title;

    @Constraints.Required
    @Constraints.MaxLength(1000)
    @Constraints.MinLength(10)
    private String description;

    @Column(name = "created_at")
    @CreatedTimestamp
    private Date createdAt;

    @Column(name = "updated_at")
    @UpdatedTimestamp
    private Date updatedAt;

    @Column(name = "valid_from")
    private Date validFrom = new Date();

    @Column(name = "valid_to")
    private Date validTo = new Date((long)2147483647*1000);


}

生成的sql文件是

create table coupons (
  id                            bigserial not null,
  title                         varchar(255),
  description                   varchar(255),
  valid_from                    timestamp,
  valid_to                      timestamp,
  created_at                    timestamp not null,
  updated_at                    timestamp not null,
  constraint pk_coupons primary key (id)
);

drop table if exists coupons cascade;

ebean是否将约束转换为sql文件?如何确保我的约束也反映在sql文件中?

2 个答案:

答案 0 :(得分:0)

Ebean不读取任何Play约束注释。

@Constraints.Required
@Constraints.MaxLength(80)

因此,RequiredMaxLength未被读取,因此不会影响生成的DDL。

Ebean读取JPA注释和javax.validation.constraints注释@NotNull@Size。例如,您可以使用:

@NotNull
@Size(max = 80)

答案 1 :(得分:0)

Ebean仅使用JPA Annotations

您可以签出@Column批注的文档,该批注具有诸如

@Column(nullable = false)

但是,没有最小或最大字符串长度或确保字符串不为空的选项。