Как я могу определить тип "ТЕКСТ", используя eBean in Play! фреймворк?
Когда я определяю переменную в классе Model как String, она преобразуется как "VARCHAR (255)" в DB.
Тем не менее, я хочу сохранить более 255, потому что эти данные представляют собой очень длинный текст, состоящий из нескольких абзацев.
Насколько я помню, в DB существует тип TEXT для сохранения очень длинного текста.
Как я могу определить тип TEXT в Play! рамки?
Я попробовал Constraints.MaxLength и Constraints.Max, определенные в Play! framework api.
Однако файл 1.sql(созданный Ebean DDL автоматически) определяет эту переменную как VARCHAR (255).
Спасибо, заранее!
Ответы
Ответ 1
В вашей модели просто используйте определение столбца как TEXT
:
@Entity
public class MyEntity extends Model {
@Id
private Long id;
@Column(columnDefinition = "TEXT")
private String aLongText;
....
}
Я уже использовал его с Postgres, не знаю, нормально ли это с другим сервером базы данных.
Ответ 2
Вы можете использовать аннотацию @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.