2012-09-10 60 views
13

當我在Model類中將變量定義爲字符串時,它將在數據庫中轉換爲'VARCHAR(255)'。如何在Play中使用eBean定義'TEXT'類型!框架?

不過,我想節省超過255,因爲這個數據是很長的文本由幾個段落。

至於我記得,有在DB一個TEXT類型保存很長的文本。

我怎樣才能在遊戲定義文本類型!框架?

我試圖Constraints.MaxLength和Constraints.Max在遊戲中定義!框架api。

然而,仍然1.SQL文件(通過自動Ebean DDL創建)定義此變量爲VARCHAR(255)。

感謝,提前!

回答

22

在模型中,只需要使用列定義設置爲TEXT

@Entity 
public class MyEntity extends Model { 

    @Id 
    private Long id; 

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

} 

我已經與Postgres的使用它,不知道它是確定與其他數據庫服務器。

+0

這對於Oracle來說是不正確的。另一種方法是「Clob」 – ludwigm

9

你可以用自己場上的@Lob註釋,這將產生對MySQL的類型longtext和PostgreSQL類型text:在MySQL

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> 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。

+0

我首先嚐試了這個答案,但從2017-02-02開始,Ebean 9.3.1和MySQL 5.7.17一起,'@ Lob'產生'longblob'而不是'longtext'。這將與UTF-8一起工作嗎?我想我會用'@Column(columnDefinition =「TEXT」)'來代替數據庫。 – GlenPeterson

相關問題