web-dev-qa-db-fra.com

Champ de texte utilisant l'annotation Hibernate

Je ne parviens pas à définir le type d'une chaîne.

public void setTextDesc(String textDesc) {
    this.textDesc = textDesc;
}

@Column(name="DESC")
@Lob
public String getTextDesc() {
    return textDesc;
}

et cela n’a pas fonctionné, j’ai vérifié le schéma mysql et il reste varchar (255), j’ai aussi essayé, 

@Column(name="DESC", length="9000")

ou

@Column(name="DESC")
@Type(type="text")

J'essaye de faire en sorte que le type soit TEXT, toute idée serait bien appréciée!

47
bernardw

Vous avez dit "J'ai vérifié le schéma mysql et il reste varchar (255)" - vous attendiez-vous à ce que Hibernate modifie automatiquement votre base de données? Ça ne va pas. Même si vous avez défini hibernate.hbm2ddl.auto, je ne pense pas que Hibernate modifierait la définition de colonne existante.

Si vous devez générer un nouveau script de création de base de données, @Lob doit générer une colonne de type "TEXT" si vous ne spécifiez pas explicitement la longueur (ou si vous le faites et que sa taille est inférieure à 65 536). Vous pouvez toujours forcer cela en déclarant explicitement le type dans l'annotation @Column, tout en gardant à l'esprit que ce n'est pas portable entre bases de données:

@Column(name="DESC", columnDefinition="TEXT")
80
ChssPly76

Il existe un moyen de définir le mappage par défaut pour le type "String" sur "type" dans la base de données.

Enregistrez le fichier suivant dans le package contenant vos entités. S'il vous plaît changer le nom du paquet aussi.

Cela définira tous les champs de type "String" sur "text" dans la base de données pour le package spécifié.

package-info.Java

@TypeDefs({
      @TypeDef(name="string",defaultForType=Java.lang.String.class,typeClass=org.hibernate.type.TextType.class)
})

package com.package.app;

import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
0
user2049132