TEXT的Hibernate列注释

时间:2017-04-19 15:33:23

标签: java spring 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

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)。任何人都可以帮我解决这个问题吗?提前谢谢。

5 个答案:

答案 0 :(得分:6)

您可以使用javax.persistence中的@Lob ...它更优雅:

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

答案 1 :(得分:5)

m?PATTERN?课程中有一行:

org.hibernate.dialect.MySQLDialect

所以基于这个,如果你定义你的字段:

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

它应该可以解决问题。

答案 2 :(得分:1)

您可以用作@Lob注释,也可以用作@Column(columnDefinition =“ TEXT”)

@Lob
private String someField;

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

这里是链接,以了解更多信息: JPA Annotation for the TEXT Type

答案 3 :(得分:0)

保留列定义可以解决问题(仅使用@Column注释,hibernate很聪明地弄明白),但varchar是新版本sql中text的替代服务器,所以我认为使用varchar没有错。 (255)是默认长度。

答案 4 :(得分:0)

@Column(columnDefinition =“ TEXT”) 私人String传记;

您可以使用上面的代替

@Lob
@Column(name = "biography")
private String biography;

LOB: 顾名思义,旁瓣是一个大对象。用数据库术语来说,lob列用于存储很长的文本或二进制文件。

我们可以从两种lob中进行选择:

  1. CLOB –用于存储文本的字符lob。
  2. BLOB –二进制lob,可用于存储二进制数据 我们可以使用JPA @Lob批注将大字段映射到大型数据库对象类型。

注意 当我们在String类型属性上使用@Lob记录时,JPA规范指出,持久性提供程序应使用大字符类型对象来存储属性的值。因此,PostgreSQL可以将字符lob转换为TEXT类型。