本博客属原创,转载请注明出处

问题描述:

环境:

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了

最新文章

  1. C++重载new和delete运算符
  2. C#调用windows API的一些方法
  3. jquery mobile cannot be created in a document with origin &#39;null&#39; and URL
  4. Windows:文件服务器,访问进去不能查看到完整的文件
  5. 简单制作 OS X Yosemite 10.10 正式版U盘USB启动安装盘方法教程
  6. objective-c 中随机数的用法 3种:arc4random() 、random()、CCRANDOM_0_1()
  7. ArcMap上发布地图服务前,“将图形转为要素的选项”时报“输出名称无效”错误
  8. Git工作流指南:Gitflow工作流 Comparing Workflows
  9. [转载]C# Random 生成不重复随机数
  10. oschina服务器软件
  11. windows下apache如何完整卸载?
  12. JQuery - 垂直显示隐藏DIV
  13. mongoDB基本使用(二)
  14. 剑指Offer 65. 矩阵中的路径 (回溯)
  15. 059 SparkStream介绍
  16. jdk1.8 HashMap红黑树操作详解-putTreeVal()
  17. 笔记一:CSS选择器
  18. 还没被玩坏的robobrowser(4)——从页面上抓取感兴趣的内容
  19. Echarts 如何与 百度地图结合?
  20. html select 和dropdownlist小结收集

热门文章

  1. BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP + 带权重心
  2. BZOJ 1585: Earthquake Damage 2 地震伤害 网络流 + 最小割
  3. PAT_A1143#Lowest Common Ancestor
  4. 【剑指Offer】63、数据流中的中位数
  5. C#那20道题
  6. Linux思维导图之文本工具、正则
  7. cd:切换目录
  8. 在UEditor编辑器的工具栏上加一行文字
  9. PHP循环输出二维数组的数据
  10. C#学习笔记_03_运算符