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 ...
随机推荐
- nodejs中使用linq
官网地址 https://github.com/mihaifm/linq 安装 npm install linq 导入 var Enumerable = require(‘linq‘); 例子 1 总 ...
- thinkphp处理jQuery EasyUI form表单问题
jQuery EasyUI form表单不是ajax方式提交,而是在提交的时候新建一个隐藏的iframe并在iframe里面创建一个与绑定表单一样的表单,然后在iframe里面进行同步提交而不是异步提 ...
- oracle数据库中的异常处理
create or replace procedure prc_get_sex (stuname student.name%type) as stusex student.sex%type; begi ...
- MAC nginx代理设置
问题: 10.154.156.83:10081私服不存在了.但是不能改.用nginx代理至maven.xx.cn 增加换回地址: sudo ifconfig lo0 add 10.154.156.83 ...
- C# 版本和.NET 版本以及VS版本的对应关系
https://en.wikipedia.org/wiki/C_Sharp_(programming_language)#Versions http://stackoverflow.com/quest ...
- 【bzoj2721】[Violet 5]樱花
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=2721 好久没做数学题了,感觉有些思想僵化,走火入魔了. 这道题就是求方程$ \frac ...
- Python学习札记(三十八) 面向对象编程 Object Oriented Program 9
参考:多重继承 NOTE #!/usr/bin/env python3 class Animal(object): def __init__(self, name): self.name = name ...
- 【异常记录(七)】MVC:从客户端中检测到有潜在危险的 Request.Form 值 的解决方法 [转]
从客户端(Content="<EM ><STRONG ><U >这是测试这...")中检测到有潜在危险的Request.Form 值. 说明: ...
- zoj Candies 思维
http://acm.zju.edu.cn/changsha/showProblem.do?problemId=31 题意: 给你n个非负整数,然后输入n个x[i],x[i] == -1表示第i个数不 ...
- redis持久化策略
redis是内存数据库,它把数据存储在内存中,这样在加快读取速度的同时也对数据安全性产生了新的问题,即当redis所在服务器发生宕机后,redis数据库里的所有数据将会全部丢失. 为了解决这个问题,r ...