将“text”设置为JPA中字符串的默认类型?

问题描述 投票:0回答:2

我在我的项目中使用 Spring Boot + Spring Data + Postgresql + Kotlin。

默认情况下,JPA 使用 varchar(255) 作为字符串字段,因此我需要为所有字符串列添加 @Column(columnDefinition = "TEXT")。

当我不添加@Column时,有什么方法可以默认为String设置TEXT?

spring hibernate
2个回答
3
投票

目前还没有办法做到这一点。

您必须使用

@Lob
@Column(columnDefinition="TEXT")

更多信息在这里 - https://www.baeldung.com/jpa-annotation-postgresql-text-type


0
投票

您可以通过指定自定义 PostgreSQL 方言来实现此目的:

import org.hibernate.boot.model.TypeContributions;
import org.hibernate.dialect.PostgreSQLDialect;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.type.SqlTypes;
import org.hibernate.type.descriptor.sql.internal.DdlTypeImpl;

public class CustomPostgreSQLDialect extends PostgreSQLDialect {

  @Override
  protected void registerColumnTypes(
    TypeContributions typeContributions,
    ServiceRegistry serviceRegistry
  ) {
    super.registerColumnTypes(typeContributions, serviceRegistry);

    var ddlTypeRegistry = typeContributions
      .getTypeConfiguration()
      .getDdlTypeRegistry();

    ddlTypeRegistry.addDescriptor(
      new DdlTypeImpl(SqlTypes.VARCHAR, "text", this)
    );
  }
}

然后在

application.properties
中设置这个值:

spring.jpa.properties.hibernate.dialect=your.package.CustomPostgreSQLDialect
© www.soinside.com 2019 - 2024. All rights reserved.