Как я могу определить тип «ТЕКСТ», используя eBean в Play! фреймворк?

Когда я определяю переменную в классе Model как строку, она преобразуется как «VARCHAR (255)» в БД.

Однако я хочу сохранить больше 255, потому что эти данные представляют собой очень длинный текст, состоящий из нескольких абзацев.

Насколько я помню, в БД есть тип TEXT для сохранения очень длинного текста.

Как определить тип ТЕКСТА в Play! фреймворк?

Я попробовал Constraints.MaxLength и Constraints.Max, определенные в Play! фреймворк API.

Однако файл 1.sql (созданный Ebean DDL автоматически) определяет эту переменную как VARCHAR(255).

Заранее спасибо!


person byron1st    schedule 10.09.2012    source источник


Ответы (2)


В вашей модели просто используйте определение столбца, установленное как TEXT:

@Entity
public class MyEntity extends Model {

    @Id
    private Long id;

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

}

Я уже использовал его с Postgres, не знаю, нормально ли это с другим сервером базы данных.

person ndeverge    schedule 10.09.2012
comment
Например, для Oracle это неверно. Альтернатива есть Clob - person ludwigm; 07.03.2013

Вы можете использовать аннотацию @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-объект.

person Michael Lynch    schedule 01.10.2012
comment
Сначала я попробовал этот ответ, но по состоянию на 2017-02-02 с Ebean 9.3.1 с MySQL 5.7.17 @Lob дает longblob вместо longtext. Будет ли это работать с UTF-8? Я думаю, что вместо этого я выберу БД с @Column(columnDefinition = "TEXT"). - person GlenPeterson; 02.02.2017