mysql text映射_mysql – 使用TEXT字段将Grails Domain类映射到旧数据库时出现问题

我正在尝试使用Grails 1.3.7和

MySQL 5.1.56为遗留数据库构建一组域类.我将BuildConfig.groovy文件中的MySQL连接器指定为’mysql:mysql-connector-java:5.1.13′.

数据库模式有一个名为’abstract’的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):这是自定义方言类,正如@Stefan的答案所示:

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" );

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值