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
版本,这将转换为text
和SqlServerDialect
类型。由于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 中将字符串列拆分为多行单个单词和单词对?
在 Pandas 中将字符串列转换为日期的有效方法(在 Python 中),但没有时间戳