13

当我将模型类中的变量定义为字符串时,它在 DB 中被转换为 'VARCHAR(255)'。

但是,我想保存超过 255 个,因为这些数据是由几个段落组成的很长的文本。

据我记得,DB 中有一个 TEXT 类型可以保存很长的文本。

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

我尝试了 Play 中定义的 Constraints.MaxLength 和 Constraints.Max!框架 API。

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

提前致谢!

4

2 回答 2

22

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

@Entity
public class MyEntity extends Model {

    @Id
    private Long id;

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

}

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

于 2012-09-10T06:58:28.130 回答
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;

}

在 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) 

在 PostgreSQL 中,这会产生:

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

根据Java EE api

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

这意味着一个类型的字段String应该给你一些文本 blob,一个类型的字段byte[]应该给你一些二进制 blob。

于 2012-10-01T08:30:51.523 回答