通过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"); 
} 
+0

尼斯answer..thanks!但我使用MYSQL – 2013-05-13 14:50:45

+0

嗯,我不是一个心灵读者,所以我不知道。 MySQL应该为'DataType.LONG_STRING'生成'TEXT'。我刚刚测试过,它确实如此。你使用的是什么版本的ORMLite?它可能使用错误的数据库类型@AbdennourToumi? – Gray 2013-05-13 15:20:13

+0

我使用last => 4.45。再次感谢此跟踪。但是,如果DataType.LONG_STRING生成了TEXT,那么LONGVARCHAR – 2013-05-13 16:20:28