TEXT的Hibernate列注释

Mar*_*sen 11 java spring hibernate jpa spring-boot

我有一个带有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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

这是它创建的Hibernate

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
Run Code Online (Sandbox Code Playgroud)

它仍将其设置为varchar(255).任何人都可以帮我解决这个问题吗?先感谢您.

小智 8

您可以使用@Lobjavax.persistence ......它更优雅:

@Column
@Lob
public String getDescription() {...
Run Code Online (Sandbox Code Playgroud)


Mac*_*ski 7

org.hibernate.dialect.MySQLDialect课堂上有一行:

registerColumnType( Types.CLOB, 65535, "text" );
Run Code Online (Sandbox Code Playgroud)

因此,基于此,如果您像这样定义字段:

@Column(length = 65535, columnDefinition = "text")
private String biography;
Run Code Online (Sandbox Code Playgroud)

它应该可以解决问题。

  • 奇迹般有效。首先生效掉落表。 (2认同)

dmb*_*dnr 0

保留列定义可以解决问题(只需用 注释@Column,hibernate 很聪明就能解决),但在较新版本的 sql server 中varchar是替换的text,所以我认为使用 没有什么问题varchar。(255) 是默认长度。

  • 遗憾的是,仅使用 Column 进行注释也不起作用,它仍然给出 varchar。我觉得如果它仍然是 varchar 就很奇怪了。如何在数据库中获取超过 255 个字符? (2认同)