Java JPA-如何在DDL中将字符串列设置为varchar(max)
使用,属性的DDL生成:Java JPA-如何在DDL中将字符串列设置为varchar(max),java,sql-server,hibernate,jpa,ddl,Java,Sql Server,Hibernate,Jpa,Ddl,使用,属性的DDL生成: @Column final String someString; 将是someString varchar(255)null @Column(length = 1337) final String someString; 将产生someString varchar(1337)null 但是我如何让它生成someString varchar(max)null 是否可以使用长度-属性,或者我需要使用列定义-属性 由于length在JPA规范和javadocs中定义为in
@Column
final String someString;
将是someString varchar(255)null
@Column(length = 1337)
final String someString;
将产生someString varchar(1337)null
但是我如何让它生成someString varchar(max)null
是否可以使用
长度
-属性,或者我需要使用列定义
-属性 由于length
在JPA规范和javadocs中定义为int
类型,并且max
不是int
,因此可以安全地假设您被委托到columnDefinition
数据存储相关路径。但是varchar(max)
无论如何都依赖于数据存储。几个月过去了,新知识已经获得,所以我将回答我自己的问题:
@Lob
@Column
final String someString;
产生最正确的结果。在我使用的
hbm2ddl
版本中,它将被转换为text
类型,并使用sqlserverdial
。因为在较新版本的中,希望较新版本的hbm2ddl
将产生varchar(max)
,而不是text
,用于这种类型的映射(我目前被困在一个相当过时的Hibernate版本中……)使用@Size(max=1337)
。它确实会生成varchar(1337)您可以使用此代码-
型号代码:
@NotNull
@Length(max = 7)
@Column(name = "Gender")
private String gender;
SQL输出类似于-
> gender varchar(7)
嗨,下面的代码修复了相同的问题
@Column(columnDefinition="TEXT")
@Lob
final String someString;
项目中的其他地方用
@Lob
注释了大型文本,这导致了text
SQL数据类型。将执行相同的操作。提供一个自定义SQLServerDialogue,将文本lob映射到varchar(max)可能也可以,但还没有尝试。@aycanadal,如果您没有找到答案,请检查:我没有投反对票,但我知道原因。varchar(最大值)。。“max”不是数字的占位符(其中有1337个字符)。。varchar(max)(无替换)是sql server中的一种数据类型。您没有回答这个问题,只是重复了其中的一部分。这并没有对现有答案提供任何改进,它的@Lob和columnDefinition都具有相同的功能,columnDefinition的使用不必要地破坏了可移植性。