2012-10-08 36 views
1

我使用hibernate.hbm2ddl.auto来创建我的表格。通过hibernate.hbm2ddl.auto创建具有更长文本字段的表格

创建我的专栏是这样的:

@Column(name = "foo", length = 8000) 
private String foo; 

这将创建一个表和字段:varchar(8000)

我需要什么,是我可以节省超过8000较长string在那里。像20000或更多。

当更改length高于8000时,它不会创建表。

当手动更改字段,然后它说:

The size (20000) given to the column 'foo' exceeds the maximum allowed for 
any data type (8000). 
+0

我建议你使用CLOB数据类型这么长的文本列 –

+0

@RahulAgrawal和什么会在Java或注释类型是什么? – Jaanus

回答

4

作为推荐使用的Clob用于这种大字符串列

@Lob指示属性应该以斑点被持久或的Clob取决于属性类型:java.sql.Clob中,字符[],炭[]和java.lang.String将被保存在Clob中。 java.sql.Blob,Byte [],byte []和可序列化的类型将保留在Blob中。

@Lob 
public String getFullText() { 
    return fullText; 
} 

@Lob 
public byte[] getFullCode() { 
    return fullCode; 
} 

如果属性类型实现java.io.Serializable并且不是基本类型,并且如果所述属性不与@Lob注解,则使用休眠序列化类型。

这里入住例如

http://tonyyan.wordpress.com/2008/10/28/clob-and-blob-saved-through-hibernate/

2

你可以尝试使用columnDefinition =“LONGVARCHAR”,而不是长度= 8000。如果用org.hibernate.dialect.SQLServer2005Dialect它应该被翻译使用到varchar(max),它能够支持长度达2G的字符串。

相关问题