我正在尝试使用Grails 1.3.7和MySQL 5.1.56为遗留数据库构建一组域类。我将BuildConfig.groovy文件中的MySQL连接器指定为'mysql:mysql-connector-java:5.1.13'。使用TEXT字段将Grails域类映射到遗留数据库问题
数据库模式有一个名为TEXT类型为“抽象”的字段。
我声明我班上相应的属性如下(为清楚起见只显示相关部分):
class Paper {
String abstractText
static mapping = {
table 'papers'
abstractText column: 'abstract'
}
static constraints = {
abstractText(nullable: false, maxSize: 65535)
}
}
当我运行我的集成测试,我得到以下错误:
Wrong column type in citeseerx.papers for column abstract.
Found: text, expected: longtext
如果我将声明更改为
static mapping = {
abstractText column: 'abstract', type: 'text'
}
我得到相同的错误。如果我将类型设置为“LONGTEXT”,我得到
Could not determine type for: longtext, at table: papers,
for columns: [org.hibernate.mapping.Column(abstract)]
我看到了一个看似相关Hibernate bug的讨论,我想知道是否有是它的一个变通,或建模的一些其他的方式具有TEXT字段的模式。
感谢,
基因
编辑:下面是相关DataSource.groovy的片段:
dataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://mydbhost:3306/mydb"
username = "u"
password = "p"
dbCreate = 'validate'
//dialect = org.hibernate.dialect.MySQL5Dialect
dialect = com.fxpal.citeseer.mysql.MyMySQLDialect
println("Setting dialog = ${dialect}")
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = true
cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'
}
编辑(2):这是自定义Dialect
类,通过@的建议斯特凡回答:
import java.sql.Types;
/**
* An An extension to the SQL dialect for MySQL 5.1 to handle TEXT.
*
* @author Gene Golovchinsky
*/
public class MyMySQLDialect extends org.hibernate.dialect.MySQLDialect {
public MyMySQLDialect() {
super();
System.out.println("MyMySQLDialect: created new instance");
}
protected void registerVarcharTypes() {
System.out.println("MyMySQLDialect: RegisteringVarcharTypes");
registerColumnType(Types.VARCHAR, 16777215, "mediumtext");
registerColumnType(Types.VARCHAR, 65535, "text");
registerColumnType(Types.VARCHAR, 255, "varchar($l)");
registerColumnType(Types.LONGVARCHAR, "longtext");
}
}
我想通过设置DataSource.groovy dataSource闭包中的方言属性来改变方言,但它似乎没有被实例化。 (我把一个打印语句放到构造函数中,在堆栈跟踪之前没有看到相应的输出。)我也尝试将方言设置为MySQL5Dialect,最后我设置了hibernate日志级别来跟踪,这产生了一堆“Binding财产“声明,但没有任何指示错误。我还应该尝试确保方言设置得到尊重? –
你可以plz发布datasources.groovy片段吗? –
我将它添加到我的问题中。谢谢你的帮助! –