web-dev-qa-db-fra.com

JPA: comment conserver une chaîne dans un champ de base de données, tapez MYSQL Text

L'exigence est que l'utilisateur puisse écrire un article, c'est pourquoi j'ai choisi le type Text pour le champ content de la base de données mysql. Comment puis-je convertir Java String en MySQL Text

Voici Jim Tough

@Entity
public class Article implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private Long userId;

    private String title;

    private String content;

    private Integer vote;

    //Constructors, setters, getters, equals and hashcode
}

Dans ma base de données MYSQL, content est de type Text. J'espérais qu'il y aurait quelque chose comme ça Java.sql.Text, puisque Java.sql.Blob est un type réel, mais malheureusement, cela n'existe pas

72
Thang Pham

Puisque vous utilisez JPA, utilisez l'annotation Lob (et éventuellement l'annotation Column.). Voici ce que dit la spécification JPA:

9.1.19 Annotation Lob

Une annotation Lob indique qu'une propriété ou un champ persistant doit être conservé en tant qu'objet volumineux dans un type d'objet volumineux pris en charge par la base de données. Les applications portables doivent utiliser l'annotation Lob lors du mappage vers un type Lob de base de données. L'annotation Lob peut être utilisée conjointement avec l'annotation Basic. Un Lob peut être un type binaire ou caractère. Le type Lob est déduit du type du champ persistant ou de la propriété. Sauf pour les types basés sur des chaînes et des caractères, la valeur par défaut est Blob.

Alors déclarez quelque chose comme ceci:

@Lob 
@Column(name="CONTENT", length=512)
private String content;

Les références

  • Spécification JPA 1.0:
    • Section 9.1.19 "Annotation Lob"
121
Pascal Thivent

Avec @Lob Je me retrouve toujours avec un LONGTEXT dans MySQL.

Pour obtenir TEXT je le déclare ainsi (JPA 2.0):

@Column(columnDefinition = "TEXT")
private String text

Trouvez ceci mieux, car je peux directement choisir le type de texte que la colonne aura dans la base de données.

Pour columnDefinition, il est également bon de lire this .

EDIT: Faites attention à Adam Siemions commentaire et vérifiez le moteur de base de données que vous utilisez avant d’appliquer columnDefinition = "TEXT".

91
Reitffunk

pour mysql 'text':

@Column(columnDefinition = "TEXT")
private String description;

pour mysql 'longtext':

@Lob
private String description;
18
Maxpan