web-dev-qa-db-ja.com

TEXTのHibernate列注釈

MySQLデータベースを備えたSpring MVCブートアプリケーションがあり、データベースにTEXTフィールドを取得しようとしています。私は次のコードを持っています:

Member.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

そして、それはそれが作成する休止状態です

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

Varchar(255)として設定します。誰でもこの問題で私を助けることができますか?前もって感謝します。

11
Martijn Jansen

javax.persistence ...から@Lobを使用できます。よりエレガントです。

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

org.hibernate.dialect.MySQLDialectクラスには行があります:

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

それに基づいて、次のようにフィールドを定義すると:

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

トリックを行う必要があります。

7
Maciej Kowalski

列の定義を残すことで問題を解決できる場合があります(@Column、hibernateはそれを理解するのに賢いです)、しかし、varcharは、SQLサーバーの新しいバージョンのtextの置き換えであるため、varcharを使用しても何も問題はないと思います。 (255)はデフォルトの長さです。

0
dmbdnr