通过ORMLite(不是LONGVARCHAR)持久化文本SQL类型
问题描述:
使用DataType.LONG_STRING属性值作为处理较长字符串的SQL类型LONGVARCHAR持久化。通过ORMLite(不是LONGVARCHAR)持久化文本SQL类型
但是,我想映射字段到SQL类型文本。
@DatabaseField(dataType = DataType.LONG_STRING)
String comment;
既然有difference between LONGVARCHAR and TEXT SQL Type,DataType.LONG_STRING值不解决问题
答
所以默认情况下LONG_STRING
类型应该产生TEXT
的模式 - 的Postgres和MySQL中这么做。你使用什么数据库类型?德比生成LONG VARCHAR
,Hsqldb LONGVARCHAR
和Oracle LONG
。我认为这是出于兼容性的原因。
有几种方法可以覆盖ORMLite产生的架构。最简单的就是自己定义列与columnDefinition
part of the @DatabaseField
:
@DatabaseField(columnDefinition = "TEXT")
String comment;
如果您正在为数据库保持兼容的代码更复杂的变化,你也可以覆盖DatabaseType
您使用。在这种情况下,您可以覆盖appendLongStringType(...)
方法来生成不同的模式。我想重写DerbyDatabaseType
,或者你使用任何数据库,然后添加类似:
@Override
protected void appendLongStringType(StringBuilder sb, FieldType fieldType,
int fieldWidth) {
sb.append("TEXT");
}
尼斯answer..thanks!但我使用MYSQL – 2013-05-13 14:50:45
嗯,我不是一个心灵读者,所以我不知道。 MySQL应该为'DataType.LONG_STRING'生成'TEXT'。我刚刚测试过,它确实如此。你使用的是什么版本的ORMLite?它可能使用错误的数据库类型@AbdennourToumi? – Gray 2013-05-13 15:20:13
我使用last => 4.45。再次感谢此跟踪。但是,如果DataType.LONG_STRING生成了TEXT,那么LONGVARCHAR – 2013-05-13 16:20:28