springdatajpa使用informix数据库出现no such column 异常的问题
本博客属原创,转载请注明出处
问题描述:
环境:
spring data jpa版本4.0.3
informix驱动版本3.50.JC9
程序结构
jpa配置文件对应的jdbc配置
dao层继承jpaRepository
TfaAlgRec实体类,以id属性为例,此时@Column(name="Id")
测试类:
此时会报
紧接着用jdbc的方式将tfa_alg_rec这张表的列名打印出来
console输出:
可以看到数据库表中的id是小写,而实体中用@Column注解配置的是Id。于是乎,把上面@Column注解配置改成id。此时运行却没有报异常。
但众所周知,informix数据库执行sql时是不区分大小写的,所以这很矛盾。上网查资料,原来是hibernate连接informix的时候有个bug,网址:
https://hibernate.atlassian.net/browse/HBX-1126
解决方式:
在jpa配置文件中将url中DELIMIDENT=y这个配置去掉,如下
<property name="url" value="jdbc:informix-sqli://127.0.0.1:8001/nmosdb:INFORMIXSERVER=nrmsserver;informixserver=nrmsserver;newcodeset=gbk,cp1252,819;" />
之后再把实体中id属性配置的列名改回成@Column(name="Id")。运行单元测试,成功
分析原因可能是:
首先简单介绍下DELIMIDENT这个属性,它是一个定界符,当设置了 DELIMIDENT 时,SQL 解析器将以单引号定界的字符串解释为字符串文字,而将双引号 ( " ) 定界的字符串解释为 SQL 标识。在本例中,url加上DELIMIDENT=y配置时,程序后台可能在执行sql时,将列名加上双引号如: select "Id" from tfa_alg_rec,这样的话数据库会去找列名为"Id"的列,显然没有;如果去掉这个配置,执行的sql就是select Id from tfa_alg_rec,这里列名虽叫Id,但不区分大小写,数据库会自动配置id这个列,这样就ok了
最新文章
- C++重载new和delete运算符
- C#调用windows API的一些方法
- jquery mobile cannot be created in a document with origin &#39;null&#39; and URL
- Windows:文件服务器,访问进去不能查看到完整的文件
- 简单制作 OS X Yosemite 10.10 正式版U盘USB启动安装盘方法教程
- objective-c 中随机数的用法 3种:arc4random() 、random()、CCRANDOM_0_1()
- ArcMap上发布地图服务前,“将图形转为要素的选项”时报“输出名称无效”错误
- Git工作流指南:Gitflow工作流 Comparing Workflows
- [转载]C# Random 生成不重复随机数
- oschina服务器软件
- windows下apache如何完整卸载?
- JQuery - 垂直显示隐藏DIV
- mongoDB基本使用(二)
- 剑指Offer 65. 矩阵中的路径 (回溯)
- 059 SparkStream介绍
- jdk1.8 HashMap红黑树操作详解-putTreeVal()
- 笔记一:CSS选择器
- 还没被玩坏的robobrowser(4)——从页面上抓取感兴趣的内容
- Echarts 如何与 百度地图结合?
- html select 和dropdownlist小结收集
热门文章
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP + 带权重心
- BZOJ 1585: Earthquake Damage 2 地震伤害 网络流 + 最小割
- PAT_A1143#Lowest Common Ancestor
- 【剑指Offer】63、数据流中的中位数
- C#那20道题
- Linux思维导图之文本工具、正则
- cd:切换目录
- 在UEditor编辑器的工具栏上加一行文字
- PHP循环输出二维数组的数据
- C#学习笔记_03_运算符