Hibernate查询视图返回null问题说明及解决办法
在Hibernate中对含有主键的单表操作比较简单,直接使用Hibernate针对数据库表对象进行反向生成代码,直接调用就可以了。但是在实际项目当中,经常会用到不少的多表联合查询操作,网上有很多示例,在这里就不多解释了。
针对多表操作有一种简单的处理办法就是添加数据库视图,将多表操作转换为类似单表操作来进行查询或其他操作。但在实际生成代码然后进行调用的时候你会发现和单表操作有些不一样,在xxxDAO.java文件中多了一个getId和setId方法。这是为什么呢?是因为视图无主键,这个时候Hibernate会将这个对象识别为复合主键对象,这里所知的复合主键是将所查询到的所有字段均变为主键。看到这里也许你认为没有什么不一样,按照生成代码中的提示进行调用就可以了。但在实际操作的时候也许你会发现并没有想象的那么“简单”。
在实际调用的时候如果查询视图中的数据所有列中存在null值,那么恭喜你,你的程序将会提示NullException错误,检查代码和数据库脚本,始终找不到问题,接下来肯定是上网到处搜索。如果你有幸看到这篇文章,那么恭喜你不用再找了。呵呵
废话少说,在使用list.get(0).getId()的时候提示null是因为Hibernate针对无主键视图操作的时候,不允许查询数据中存在null,如果存在,则返回数据为null,和你自己的代码没有关系,不要怀疑自己的能力。
解决方法有两个:
第一个方法比较简单,就是直接给视图添加主键,下面示例oracle中针对视图进行添加主键,这样就可以将视图操作变为单表操作,在生成代码中就没有getId和setId方法了。
create or replace view view_XXX(
aid,aname,bid,bname,
constraint "Pri_XXX" primary key (aid) rely disable
)
as
select a.aid , a.aname , b.bid , b.bname
from table1 a , table b
where a.aid = b.aid
第二个方法比较复杂一点,就是给可能出现null的字段增加默认值。
以上是我的解决办法,欢迎和大家多多沟通学习,如有任何改进意见和建议,我的QQ是1243672,欢迎联系哦。
Hibernate查询视图返回null问题说明及解决办法的更多相关文章
- WORD 的 Open 和Workbook 的 LoadFromFile 函数返回null的一种解决方法
WORD Application.Documents.Open 和 Workbook workbookExcel.LoadFromFile 函数返回null的一种解决方法 DCOM Config Se ...
- php数组使用json_encode函数中文被编码成null的原因和解决办法
大写的囧,提客户处理问题,前端的APP一直在叽叽咂咂,说收到的值是null,弄了半天原来是这个问题,记录下吧 json格式在开发中用的十分广泛.在php中json_encode函数可以直接将数组转成 ...
- Hibernate 查询,返回结果设置到DTO
1:原生sql的查询,返回结果设置到DTO: Query query = sessionFactoryRtData.getCurrentSession().createSQLQuery(hql.toS ...
- WORD Application.Documents.Open函数返回null的一种解决方法
DCOM Config Setting for "Microsoft Office Word 97 - 2003 Document" 内部配置一切正常,但调用Application ...
- PHP解码Json(json_decode)字符串返回NULL的原因及解决方法(转载)
本文主要为大家讲解了php在使用json_decode函数解码json字符串时,解码不成功返回NULL的问题原因分析和解决方法,感兴趣的同学参考下. 一般来说,php对json字符串解码使用json_ ...
- ORACLE 查询不走索引的原因分析,解决办法通过强制索引或动态执行SQL语句提高查询速度
(一)索引失效的原因分析: <>或者单独的>,<,(有时会用到,有时不会) 有时间范围查询:oracle 时间条件值范围越大就不走索引 like "%_" ...
- 移动端点击返回时强制页面刷新解决办法(pageshow)
在做移动端项目的时候经常遇到这样一个功能比如: 返回后页面不刷新,一些失效的信息依然显示在页面上.这个问题在iphone手机上会出现,在Android手机上返回时会自动刷新(由于手机机器种类不多,无法 ...
- JavaScript-jQuery报TypeError $(...) is null错误(jQuery失效)解决办法
出现这种错误一般都是jQuery的$方法被覆盖, 解决办法: 1.把$改为jQuery使用 jQuery.noConflict();//将变量$的控制权让渡给给其他插件或库 jQuery(functi ...
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
IIndexDao package com.ucap.netcheck.dao; import com.ucap.netcheck.combination.beans.IndexCombinat ...
随机推荐
- MDF文件损坏,如何恢复?(未解决)
MDF文件损坏,如何恢复?MDF附加失败,数据库附加失败 1.附加时 2.用替换法设置后重建日志 (其实已经删掉日志了,确保操作之前没有日志,但是运行 alter database [test] Re ...
- (2.10)Mysql之SQL基础——约束及主键重复处理
(2.10)Mysql之SQL基础——约束及主键重复处理 关键词:mysql约束,批量插入数据主键冲突 [1]查看索引: show index from table_name; [2]查看有约束的列: ...
- <option> 标签的 value 属性
<html> <body> <form action="/example/html/form_action.asp" method="get ...
- cocos代码研究(18)Widget子类Slider学习笔记
理论基础 滑动条控件. 代码实践 实例: // Create the slider Slider* slider = Slider::create(); slider->loadBarTextu ...
- 39. Combination Sum(回溯)
Given a set of candidate numbers (candidates) (without duplicates) and a target number (target), fin ...
- c++第二十九天
p143~p151:其他隐式类型转换1.数组转换成指针,大多数表达式自动转换成指向数组首元素的指针. 2.指针的转换. 3.转换成布尔类型,例如在if (condition) 中. 4.转换成常量. ...
- Sybase数据库常用sql语言
Sybase数据库常用sql语言 1,表备份: --table_name1:需要备份的表; table_name2:备份后的表 SELECT * into table_name2 from table ...
- 对OpenCV中seamlessClone的初步实验
seamlessClone是OpenCV中新出现的函数,应该说如果能够基于较为准确的图像分割,能够得到很好的结果. 原始的前景,背景 三种flag下的融合结果 //注意头文件中添加 #inclu ...
- Linux内核分析
通过分析汇编代码理解计算机是如何工作的 网易云课堂<Linux内核分析>作业 实验目的: 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 实验过程: 登陆实验楼虚拟机h ...
- anaconda + tensorflow +ubuntu 超级菜鸟,大家多指正【转】
本文转载自:https://blog.csdn.net/zzw000000/article/details/51203331 1.首先安装Anaconda 下载linux对应的anaconda版本,下 ...