[解决方法]Hibernate查询部分字段(含外键)出错,报空指针异常

假设当前表结构如下:

  food表字段有foodid,name,外键businessid,外键type

  business表字段有,name,外键type

  type表字段有id,name,foodid

Hibernate生成的对应POJO分别是Food,Business,Type

需要查询food表部分字段,如name和外键businessid

  则可在Food类中添加只有相应成员变量的构造方法,Food(String name,Business business)

使用hql语句

select new Food(name,business) from Food where foodid=1

 

以上可以顺利查询,但是如果调换name和顺序

使用Food(Business business,String name)

hql语句

select new Food(business, name) from Food where foodid=1

就会报空指针异常

这其实是因为外键的关联表Business中也含有叫name的字段,所以会发生错误,此时只要给查询表使用别名就可以解决了.

正确的语句:

select new Food(f.business, f.name) from Food f where foodid=1

同理,如果也查询外键type, 那么:

错误的语句:

select new Food(name,business,type) from Food where foodid=1

正确的语句:

select new Food(f.name,f.business,f.type) from Food f where f.foodid=1

  

时间: 2024-08-01 07:12:24

[解决方法]Hibernate查询部分字段(含外键)出错,报空指针异常的相关文章

hibernate查询部分字段转换成实体bean

//hibernate查询部分字段转换成实体bean /** * 查询线路信息 */ @Override public List<Line> getSimpleLineListByTj(Map<String,Object> paramMap){ Criteria cr=this.getSession().createCriteria(Line.class,"Line"); // cr.setFetchMode("chuTuanInfo", F

字段和字段的参数,查询的13个方法,但标的双下划线外键和多对多操作

字段 常用字段  AutoField() 自增列,必须填入参数 primary_key=True则成为数据库的主键.无该字段时,django自动创建 一个model不能有两个AutoField字段. IntegerField() 一个整数类型.数值的范围是 -2147483648 ~ 2147483647. BooleanField() 布尔值类型 CharField() 字符类型,必须提供max_length参数.max_length表示字符的长度. TextField() 文本类型 Date

Hibernate 查询排序与联合主键映射

1.查询排序 (1)数据库排序(推荐) <map order-by="name ase" > <!--name的升序,降序desc--> session.createQuery(" ").uniqueResult() //返回唯一的对象,前台对象只有一个 <set order-by="name asc"> (2)内存排序 <set sort="natural" > sort属性值

Hibernate一对一双向关联(外键关联)用法小结

这几天在改一个项目源码,遇到一个问题坑了很久.场景如下(注:此处是借鉴网络上的例子,并不是自己的实验环境): 一夫一妻制--比如夫妻关系的两张数据表,一个是wif表,一个是husban表,其数据表信息如下: CREATE TABLE `wife` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFA

解决无法删除表,提示被外键约束引用

有时想删除某个表时,提示"无法删除对象 'Orders',因为该对象正由一个 FOREIGN KEY 约束引用",原因很简单不要急躁,它被其它表的外键引用了,所以无法删除,在此只需先找到哪些表的外键引用了该表的字段.通过系统函数就能解决(SQL Server系统函数提供了非常完善的功能,能代替我们查找和解决许多问题). select    fk.name,fk.object_id,OBJECT_NAME(fk.parent_object_id) as referenceTableNam

通过SQL脚本来查询SQLServer 中主外键关系

在SQLServer中主外键是什么,以及主外键如何创建,在这里就不说了,不懂的可以点击这里,这篇文章也是博客园的博友写的,我觉得总结的很好: 此篇文章主要介绍通过SQL脚本来查看Sqlserver中主外键关系: SELECT f.name AS '关系名称', OBJECT_NAME(f.parent_object_id) AS '表名称', COL_NAME(fc.parent_object_id,fc.parent_column_id) AS '字段名称', OBJECT_NAME (f.r

Hibernate一对一双向关联(外键)

网站上各种搜索,都是一些清晰或者不清晰的例子,但是用下来一是确实不给力,二是完全不知道所以然. 后来终于在书中查到了就在这里记一下. 首先要说明,这里只解释双向一对一只有一个表里面有外键的情况. 就以比较普遍的Person和Address为例. 新建表t_person: person_id,person_name. 新建表t_address:address_id,person_id. 新建Person.java类里面有属性:personId, personName, address; 新建Add

Oracle数据库中,知道一张表,查询与其有主外键关系的表

--查外键表NC56.CSCI有无对应的主键表 SELECT a.owner, A.TABLE_NAME primary_table_name, A.CONSTRAINT_NAME primary_table_key_name, b.owner, B.TABLE_NAME foreign_table_name, B.CONSTRAINT_NAME foreign_table_foreign_key_name, B.STATUS foreign_table_foreign_key_stat FRO

查询数据所有的外键关系

select oSub.name AS [子表名称], fk.name AS [外键名称], SubCol.name AS [子表列名], oMain.name AS [主表名称], MainCol.name AS [主表列名] from sys.foreign_keys fk JOIN sys.all_objects oSub ON (fk.parent_object_id = oSub.object_id) JOIN sys.all_objects oMain ON (fk.referenc