前段时间工作中使用jpa做持久化,数据库使用informix,在映射大文本字段的时候出了一些问题,informix数据库用的人比较少,所以从网上查找相应的解决方法颇费了不少功夫,现在有空闲了,将解决方法整理了一下, 共享出来。
在持久化类里面使用如下方式映射大文本字段:
@Lob
@Basic(fetch=FetchType.EAGER)
@Column(name="result_content")
public String getResultContent() {
return resultContent;
}
从持久化类自动生成数据库表时报错了,错误的具体内容记不得了,反正说是映射大文本字段的时候出的错。于是就上网搜informix使用jpa怎么映射大文本字段。
从网上搜“informix hibernate 大文本”,搜出这么个东西来:
package org.hibernate.dialect;
import java.sql.Types;
/**
* Dialect for Informix 10.
* <ul>
* <li>hint for first rows</li>
* <li>support for limitOffset</li>
* <li>added types for BLOB and CLOB</li>
* </ul>
*/
public class Informix10Dialect extends InformixDialect {
/**
*
*/
public Informix10Dialect() {
super();
registerColumnType( Types.BLOB, "blob" );
registerColumnType( Types.CLOB, "clob" );
}
public boolean useMaxForLimit() {
return false;
}
public boolean supportsLimitOffset() {
return true;
}
public String getLimitString(String querySelect, int offset, int limit) {
String os = "";
if (offset > 0) os = " skip " + offset;
return new StringBuffer( querySelect.length() + 24 + os.length())
.append(querySelect)
.insert( querySelect.toLowerCase().indexOf( "select" ) + 6,
" {+ FIRST_ROWS }" + os + " first " + limit )
.toString();
}
}
该类扩展了hibernate自带的InformixDialect,提供了informix 10 的使用first和skip
进行分页查询,
并添加了clob和blob类型的映射。这个类是外国人写的,他们在使用hibernate的过程中发现了InformixDialect不支持skip,并缺少blob和clob映射的问题,就自行扩展了InformixDialect,并提交给了hibernate,希望hibernate的以后版本中添加支持informix 10的新特性的Dialect。
因为informix 10以前的版本分页查询只支持使用first,informix 10 开始,添加了skip关键字,hibernate自带的InformixDialect生成的sql分页语句不使用skip,所以上面的类中的三个方法添加了informix 10 的skip关键字支持。
(但是如果你的informix版本低于informix 10,应该将那三个方法注释掉。)
(在informix 10及以后版本中具体如何使用first,skip实现分页查询,网上能方便的找到。)
上面的类还增加了blob和clob两种字段的映射,开始我以为我项目中的大文本映射错误只是因为InformixDialect中缺少相应的大文本字段的映射,所以我直接将上面的类添加到项目中,并在项目的配置文件中设置使用该dialect,
修改后,在保存的时候可以将字符串成功插入到数据库的大文本字段中,但是在查询的时候不能从大文本字段中解析出文本内容来。
郁闷之余,又上网查informix数据库支持的数据类型,查到原来informix使用text类型存放大文本字段,于是我将上面的类中的构造方法改为:
public Informix10Dialect() {
super();
//registerColumnType( Types.BLOB, "blob" );
registerColumnType( Types.CLOB, "text" );
}
持久化类中的大文本字段的annotation不做任何修改。
改完后启动项目测试一下,OK,大功告成,即能成功的将文本存进去又能将文本解析出来并设置到持久化对象的相应字段中。
最后说明一下,我项目中使用的informix的版本比较低,不支持skip,所以我把那三个添加skip支持的方法注释掉了。
我使用的InformixDialect全文如下:
package org.hibernate.dialect;
import java.sql.Types;
/**
* Dialect for Informix 10.
* <ul>
* <li>hint for first rows</li>
* <li>support for limitOffset</li>
* <li>added types for BLOB and CLOB</li>
* </ul>
*/
public class Informix10Dialect extends InformixDialect {
/**
* 添加BLOB与CLOB类型的映射
*/
public Informix10Dialect() {
super();
// registerColumnType(Types.BLOB, "blob" );
registerColumnType(Types.CLOB, "text" );
}
//informix10支持使用skip m first n进行分页
// public boolean useMaxForLimit() {
// return false;
// }
//
// public boolean supportsLimitOffset() {
// return true;
// }
//
// public String getLimitString(String querySelect, int offset, int limit) {
// String os = "";
// if (offset > 0) os = " skip " + offset;
// return new StringBuffer( querySelect.length() + 24 + os.length())
// .append(querySelect)
// .insert( querySelect.toLowerCase().indexOf( "select" ) + 6,
// " {+ FIRST_ROWS }" + os + " first " + limit )
// .toString();
// }
}
分享到:
相关推荐
Informix数据库连接驱动jar包是Java应用程序与Informix关系型数据库管理系统进行交互的重要组件。这些jar文件包含了必要的类和资源,使得Java程序能够利用JDBC(Java Database Connectivity)API来执行SQL语句、管理...
Informix数据库以其高效、稳定和对大数据处理的支持而闻名,尤其适合OLTP(在线事务处理)和实时分析场景。在Java环境中,使用Informix JDBC驱动可以无缝集成Informix数据库到企业级应用中,实现数据的存取和处理。
此指南将教你如何利用这个工具高效地将数据导入到Informix数据库,这对于数据仓库和大数据处理场景非常有用。 4. **IBM Informix SQL指南:语法**: 此文档深入解析了Informix支持的SQL语法,包括DML(数据操纵语言...
《Informix数据库详解》 ...综上所述,这套文档集为Informix数据库的学习和实践提供了全面的指导,无论是初学者还是经验丰富的数据库管理员,都能从中获取宝贵的参考资料,提升对Informix数据库的理解和使用能力。
使用 dbexport,你可以将数据库结构和数据保存为文本文件,便于存储和恢复。然而,执行 dbexport 时需要确保所有与数据库操作相关的应用程序都已经停止,以免数据不一致。例如,要备份名为 `test_db` 的数据库,...
1. 表空间与数据文件:Informix使用表空间来组织数据库对象,每个表空间由一个或多个数据文件组成。数据文件存储实际的数据,表空间则负责管理这些文件。 2. 索引:Informix支持B树索引、位图索引等多种索引类型,...
在 Informix for Windows 中,提供了一个名为 dbaccess 的数据库访问工具,可以使用该工具来执行 SQL 语句、创建数据库、查看数据库相关信息等。例如,在 ol_wsl_informix 实例中,我们可以创建一个名为 yhk 的...
连接数据库informix的驱动jar包
Informix是一款由IBM公司开发的关系型数据库管理系统(RDBMS),在企业级应用中广泛使用。本压缩包包含了两份珍贵的学习资源:《INFORMIX培训教材.doc》和《informix探秘.pdf》,分别以doc和pdf格式提供,适合不同...
在本文中,我们将详细介绍如何获取 Informix 11.70 数据库的名称和端口,并且使用第三方工具 DbVisualizer 连接 Informix 数据库。 一、获取 Informix 11.70 数据库的名称 在 Windows 系统下,获取 Informix 11.70...
1. **关系数据库模型**:Informix支持标准的关系数据库模型,包括表、字段、键(主键和外键)等概念。书中可能会深入解释如何创建和管理这些数据库对象,以及如何利用它们来构建复杂的数据库结构。 2. **SQL语言**...
Informix 数据库锁表问题解决方案 在 Informix 数据库中,锁表问题是一个常见的错误,会导致系统性能下降和数据不一致。锁表问题的解决需要对数据库进行深入的分析和诊断。本文将讨论 Informix 数据库锁表问题的...
通过《Informix数据库培训教材(上).doc》和《Informix数据库培训教程(下).doc》这两份文档,你将全面了解Linux环境下Informix数据库的使用,从基础操作到高级特性的应用,为你的数据库管理生涯打下坚实的基础。...
【Informix数据库基础】 在IT领域,数据库是存储和管理数据的核心工具,而Informix数据库则是其中的一款高效、可靠的数据库管理系统。本课程旨在为初学者提供Informix数据库的基础知识,帮助理解其工作原理和基本...
ODBC 数据源是连接到 Informix 数据库的桥梁,需要在系统中配置以供其他应用程序使用。配置步骤如下: 1. 打开 `管理工具`,然后选择 `数据源`。 2. 在数据源列表中,点击 `添加` 来创建新的数据源。 3. 选择 ...
《Informix学习使用手册》是一本专为Informix学习者设计的全面教程,它涵盖了从基础概念到高级特性的各种主题,旨在帮助初学者、使用者和开发者深入理解并熟练运用Informix数据库系统。这本书详细解释了Informix的...
【Informix 数据库基本操作和常用配置】 Informix 数据库是一种高效、可扩展的...理解这些基本操作和配置对有效地使用和维护Informix数据库至关重要。在实践中,务必遵循最佳实践,确保数据的安全性和系统的稳定性。
在AIX操作系统上安装Informix数据库需要遵循一系列步骤,确保系统的正确配置和数据库的稳定运行。以下是对标题和描述中涉及的知识点的详细解释: 1. **空间分配**:在安装Informix数据库时,尤其需要注意`phydbs`、...
Informix SQL 语法手册是一本关于IBM Informix数据库管理系统(DBMS)中的SQL语言使用的权威指南。该手册为用户提供了全面深入的理解Informix环境下SQL语法的具体用法,帮助数据库管理员、开发者和其他相关人员更加...
- 使用informix utilities如onstat,查看数据库运行状态、连接信息、内存使用、锁状态等,以诊断问题。 这些解答涵盖了Informix数据库维护中的关键问题,对于数据库管理员来说,理解和掌握这些知识点对于确保...