2012-09-10 19 views
13

Cuando defino una variable en la clase de modelo como una cadena, se convierte como 'VARCHAR (255)' en DB.¿Cómo puedo definir el tipo 'TEXT' usando eBean en Play! ¿marco de referencia?

Sin embargo, quiero guardar más de 255 porque estos datos son textos muy largos que constan de varios párrafos.

Por lo que recuerdo, hay un tipo de texto en DB para guardar texto muy largo.

¿Cómo puedo definir el tipo de texto en Play! ¿marco de referencia?

Intenté Restraints.MaxLength y Constraints.Max definidos en Play! marco api.

Sin embargo, el archivo 1.sql (creado por Ebean DDL automáticamente) define esta variable como VARCHAR (255).

¡Gracias, de antemano!

Respuesta

22

En su modelo, sólo tiene que utilizar la definición de columna fijado como TEXT:

@Entity 
public class MyEntity extends Model { 

    @Id 
    private Long id; 

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

} 

que ya utilicé con Postgres, no sé si está bien con otro servidor de base de datos.

+0

No es correcto para Oracle, por ejemplo. Una alternativa es "Clob" – ludwigm

9

usted podría utilizar la anotación @Lob en su campo que producirá tipo longtext en MySQL y escribir text en 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; 

} 

en MySQL esta rendimientos:

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) 

en PostgreSQL esta rendimientos:

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

De acuerdo con la Java EE api:

El tipo LOB se infiere del tipo del campo persistente o propiedad

Lo que significa que un campo de tipo String debe darle una cierta burbuja de texto y un campo de tipo byte[] debería darle un poco de blob binario.

+0

Intenté esta respuesta primero, pero a partir del 2017-02-02 con Ebean 9.3.1 con MySQL 5.7.17, '@ Lob' produce' longblob' en lugar de 'longtext'. ¿Eso funcionará con UTF-8? Creo que iré a DB específico con '@Column (columnDefinition =" TEXT ")' en su lugar. – GlenPeterson

Cuestiones relacionadas