JPA - 如何在 DDL 中将字符串列设置为 varchar(max)

Posted

技术标签:

【中文标题】JPA - 如何在 DDL 中将字符串列设置为 varchar(max)【英文标题】:JPA - How to set string column to varchar(max) in DDL 【发布时间】:2013-05-01 02:55:04 【问题描述】:

使用JPA,为属性生成 DDL:

@Column
final String someString;

将是someString varchar(255) null

@Column(length = 1337)
final String someString;

将产生someString varchar(1337) null

但是我怎样才能让它产生someString varchar(max) null

是否可以使用length-属性,还是我需要使用columnDefinition-属性?

【问题讨论】:

【参考方案1】:

几个月过去了,获得了新知识,所以我将回答我自己的问题:

@Lob
@Column
final String someString;

产生最正确的结果。对于我正在使用的hbm2ddl 版本,这将转换为textSqlServerDialect 类型。由于varchar(max) is the replacement for text 在SQL Server 的较新版本中,希望hbm2ddl 的较新版本将产生varchar(max) 而不是text 用于这种类型的映射(我现在被困在一个相当过时的Hibernate 版本中..)

【讨论】:

提供将文本 lob 映射到 varchar(max) 的自定义 SQLServerDialect 也可以解决问题,但尚未尝试。【参考方案2】:

由于 length 在 JPA 规范和 javadocs 中定义为 int 类型并且 max 不是 int ,因此可以安全地假设您被委托给 columnDefinition 依赖于数据存储的路由。但是varchar(max) 无论如何都是依赖于数据存储的。

【讨论】:

项目大文本中的其他地方用@Lob注释,这导致text SQL-datatype。也会这样做..【参考方案3】:

您好,下面的代码解决了同样的问题

@Column(columnDefinition="TEXT")

@Lob

final String someString;

【讨论】:

这对现有答案没有任何改进,它具有相同的 @Lob 和 columnDefinition,并且使用 columnDefinition 不必要地破坏了可移植性。【参考方案4】:

使用@Size(max = 1337)。它确实会生成varchar(1337)

【讨论】:

@aycanadal,以防万一您没有找到答案,请查看:***.com/questions/34588354/… 我没有投反对票,但我知道原因。 docs.microsoft.com/en-us/sql/t-sql/data-types/… varchar(max) .. "max" 不是数字的占位符(你有 1337).. varchar(max)(无替换)是 sql server 中的一种数据类型。【参考方案5】:

您可以使用此代码 -

型号代码:

@NotNull  
@Length(max = 7)  
@Column(name = "Gender")  
private String gender;

SQL 输出类似于 -

> gender varchar(7)

【讨论】:

你没有回答问题,只是重复了部分问题。

以上是关于JPA - 如何在 DDL 中将字符串列设置为 varchar(max)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BigQuery SQL 中将字符串列拆分为多行单个单词和单词对?

在 Spark-Scala 中将单个字符串列拆分为多列

在 Pandas 中将字符串列转换为日期的有效方法(在 Python 中),但没有时间戳

将实体中的列表转换为数据库中的单个字符串列

如何在winforms的datagridview中将字符串排序为数字

如何在配置单元中将字符串数据类型列转换为日期格式