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

时间:2013-05-07 08:08:38

标签: java sql-server hibernate jpa ddl

使用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 - 属性?

5 个答案:

答案 0 :(得分:65)

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

@Lob
@Column
final String someString;

产生最正确的结果。使用hbm2ddl我使用的版本时,会使用text将其转换为SqlServerDialect类型。自varchar(max) is the replacement for text的较新版本SQL Server以来,hbm2ddl的较新版本有望为此类映射生成varchar(max)而不是text(I'}我现在坚持使用一个相当陈旧的Hibernate版本。)

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

您可以使用此代码-

型号代码:

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

SQL输出类似于-

> gender varchar(7)

答案 3 :(得分:-1)

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

@Column(columnDefinition="TEXT")

@Lob

final String someString;

答案 4 :(得分:-5)

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