【问题标题】:Constraints in ebean java play framework not reflected in generated sqlebean java play框架中的约束未反映在生成的sql中
【发布时间】:2016-08-03 05:22:35
【问题描述】:

我在基于 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 文件中?

【问题讨论】:

    标签: java sql sql-server playframework ebean


    【解决方案1】:

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

    @Constraints.Required
    @Constraints.MaxLength(80)
    

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

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

    @NotNull
    @Size(max = 80)
    

    【讨论】:

    • 您在哪里找到这些信息?我没有在文档中找到它。
    • 我是 Ebean 的主要提交者。我编写了读取这些注释的 Ebean 代码。
    • 如何在 ebean 中设置默认值,以便设置默认值也显示在 sql 文件中?
    • @Size 是 Bean Validation 注释,而不是 JPA 注释。据我所知,没有可以用来确保最小字符串长度的 ebean 约束注释,甚至可以用来确保字符串不为空。
    【解决方案2】:

    Ebean 仅使用 JPA Annotations

    您可以查看 @Column 注释的文档,该注释具有诸如

    之类的选项
    @Column(nullable = false)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      相关资源
      最近更新 更多