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.