gpt4 book ai didi

mysql - 使用 TEXT 字段将 Grails 域类映射到遗留数据库时出现问题

转载 作者:可可西里 更新时间:2023-11-01 07:37:57 25 4
gpt4 key购买 nike

我正在尝试使用 Grails 1.3.7 和 MySQL 5.1.56 为遗留数据库构建一组域类。我在 BuildConfig.groovy 文件中将 MySQL 连接器指定为“mysql:mysql-connector-java:5.1.13”。

数据库模式有一个名为“抽象”的文本类型的字段。

我在我的类中声明相应的属性如下(为清楚起见,仅显示相关部分):

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 类,正如@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" );
}
}

最佳答案

您可能会从 https://github.com/hibernate/hibernate-core/blob/master/hibernate-core/src/main/java/org/hibernate/dialect/MySQLDialect.java 派生出自定义方言并更改“文本”的映射。然后使用“dialect =”设置将新方言应用于 Datasource.groovy。

关于mysql - 使用 TEXT 字段将 Grails 域类映射到遗留数据库时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6587792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com