web-dev-qa-db-fra.com

Annotation de colonne Hibernate pour TEXT

J'ai une application de démarrage MVC printanière avec une base de données MySQL et j'essaie d'obtenir un champ TEXT dans ma base de données. J'ai le code suivant:

Membre.Java

@Entity
public class Member {
private Long id;
private String name;

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

private String country;
private String state;
private String city;
private Date dateOfBirth;
private String gender;

//Getters and setters

application.properties

spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
spring.datasource.url=jdbc:mysql://localhost:3306/wave
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=mysql
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.h2.console.enabled=true

Et voici le Hibernate qu'il crée

Hibernate: drop table if exists member
Hibernate: create table member (id bigint not null auto_increment, biography varchar(255), city varchar(255), country varchar(255), date_of_birth date, gender varchar(255), name varchar(255), state varchar(255), primary key (id)) ENGINE=InnoDB

Il le définit toujours comme un varchar (255). Quelqu'un peut-il m'aider avec ce problème? Merci d'avance.

7
Martijn Jansen

Vous pouvez utiliser @Lob à partir de javax.persistence ... c'est plus élégant:

@Column
@Lob
public String getDescription() {...
5
Roll

Dans la classe org.hibernate.dialect.MySQLDialect, il y a une ligne:

registerColumnType( Types.CLOB, 65535, "text" );

Donc, sur cette base, si vous définissez votre champ de la manière suivante:

@Column(length = 65535, columnDefinition = "text")
private String biography;

ça devrait faire l'affaire.

4
Maciej Kowalski

Le fait de quitter la définition de colonne pourrait résoudre le problème (annotez uniquement avec @Column, hibernate est astucieux pour le résoudre), mais varchar remplace le nom text dans les versions les plus récentes des serveurs SQL. Il n'y a donc aucun inconvénient à utiliser varchar. (255) est la longueur par défaut.

0
dmbdnr