JPA: cómo configurar la columna de cadena en varchar (max) en DDL

2 minutos de lectura

Avatar de usuario de Tobb
tobb

Con JPA, generación de DDL para el atributo:

@Column
final String someString;

será someString varchar(255) null

@Column(length = 1337)
final String someString;

rendirá someString varchar(1337) null.

Pero, ¿cómo puedo hacer que produzca someString varchar(max) null?

¿Es posible usar el length-atributo, o necesito usar el columnDefinition-¿atributo?

Avatar de usuario de Tobb
tobb

Han pasado algunos meses, se han adquirido nuevos conocimientos, así que responderé mi propia pregunta:

@Lob
@Column
final String someString;

da el resultado más correcto. Con la versión de hbm2ddl estoy usando, esto se transformará al tipo text con SqlServerDialect. Desde varchar(max) es el reemplazo de text en versiones más recientes de servidor SQLcon suerte, versiones más nuevas de hbm2ddl rendirá varchar(max) en lugar de text para este tipo de mapeo (estoy atascado en una versión bastante anticuada de Hibernate en este momento…)

  • Proporcionar un SQLServerDialect personalizado que asigne un lob de texto a varchar (max) también podría funcionar, aunque no lo he intentado.

    – Tobb

    31 de julio de 2018 a las 17:03

Avatar de usuario de DataNucleus
Núcleo de datos

Desde length se define en la especificación JPA y javadocs como int tipo y max no es un int entonces es seguro asumir que está consignado al columnDefinition ruta dependiente del almacén de datos. Pero entonces varchar(max) depende del almacén de datos de todos modos.

  • Otros lugares en los textos grandes del proyecto fueron anotados con @Loblo que resulta en una text tipo de datos SQL. hare lo mismo..

    – Tobb

    7 mayo 2013 a las 11:13

Avatar de usuario de Kagiso Shibambo
kagiso shibambo

Hola, el siguiente código solucionó el mismo problema.

@Column(columnDefinition="TEXT")

@Lob

final String someString;

  • Esto no proporciona ninguna mejora a las respuestas existentes, tiene @Lob y columnDefinition que hacen lo mismo, y el uso de columnDefinition interrumpe innecesariamente la portabilidad.

    – Tobb

    26 de marzo de 2021 a las 10:50

Avatar de usuario de Anudeep Sharma
Anudeep Sharma

Usar @Size(max = 1337). genera varchar(1337)

Puedes usar este código –

Código del modelo:

@NotNull  
@Length(max = 7)  
@Column(name = "Gender")  
private String gender;

La salida SQL es como-

> gender varchar(7)

  • No estás respondiendo la pregunta, solo repitiendo partes de ella.

    – Tobb

    28 de abril de 2019 a las 10:46

  • No estás respondiendo la pregunta, solo repitiendo partes de ella.

    – Tobb

    28 de abril de 2019 a las 10:46

¿Ha sido útil esta solución?