如何在Play中使用eBean定义"TEXT"类型!框架?

byr*_*1st 13 database ebean playframework-2.0

当我在Model类中将变量定义为String时,它在DB中转换为'VARCHAR(255)'.

但是,我想保存超过255,因为这些数据是由几段组成的非常长的文本.

据我所知,DB中有一个TEXT类型可以保存很长的文本.

如何在Play中定义TEXT类型!框架?

我尝试在Play中定义Constraints.MaxLength和Constraints.Max!框架api.

但是,仍然1.sql文件(由Ebean DDL自动创建)将此变量定义为VARCHAR(255).

提前致谢!

nde*_*rge 22

在您的模型中,只需使用列定义设置为TEXT:

@Entity
public class MyEntity extends Model {

    @Id
    private Long id;

    @Column(columnDefinition = "TEXT")
    private String aLongText;
    ....

}
Run Code Online (Sandbox Code Playgroud)

我已经将它与Postgres一起使用,不知道是否可以与其他数据库服务器一起使用.


小智 9

您可以@Lob在您的字段上使用注释,它将longtext在MySQL text上生成类型并在PostgreSQL 上键入:

package models;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Lob;

@Entity
public class Foo {

    @Id
    public Long id;

    @Lob
    public String bar;

}
Run Code Online (Sandbox Code Playgroud)

在MySQL中,这产生:

mysql> describe foo;
+-------+------------+------+-----+---------+----------------+
| Field | Type       | Null | Key | Default | Extra          |
+-------+------------+------+-----+---------+----------------+
| id    | bigint(20) | NO   | PRI | NULL    | auto_increment |
| bar   | longtext   | YES  |     | NULL    |                |
+-------+------------+------+-----+---------+----------------+
2 rows in set (0.00 sec) 
Run Code Online (Sandbox Code Playgroud)

在PostgreSQL中,这会产生:

foodb=> \d foo;
     Table "public.foo"
 Column |  Type  | Modifiers
--------+--------+-----------
 id     | bigint | not null
 bar    | text   |
Indexes:
    "pk_foo" PRIMARY KEY, btree (id)
Run Code Online (Sandbox Code Playgroud)

根据Java EE api:

Lob类型是从持久字段或属性的类型推断出来的

这意味着类型字段String应该为您提供一些文本blob,而类型字段byte[]应该为您提供一些二进制blob.