[解决方法]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

  

时间: 04-03

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

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

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

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

mysql创建外键出错(注意数据库表字段排序)

1.  两个字段的类型或者大小不严格匹配.例如,如果一个是int(10),那么外键也必须设置成int(10),而不是int(11),也不能是tinyint.另外,你还必须确定两个字段是否一个为 signed,而另一个又是unsigned(即:无符号),这两字段必须严格地一致匹配,更多关于signed和unsigned的信息,请参阅:http://www.verysimple.com/blog/?p=57 2. 试图设置外键的字段没有建立起索引,或者不是一个primary key(主键).如果其中

PHP慢慢长路之问题与解决方法(2)——用navicat导出数据库出错问题解决

[错误过程]:导出数据库时报出"Cannot load from mysql.proc. The table is probably corrupted." [造成原因]:MySQL升级完成后未对相关数据库执行升级. [解决办法]:在命令行中执行mysql_upgrade -uroot -p 即可~

hibernate学习:一对一单向外键映射

一:例子 二:总结 在Husband中 @OneToOne @JoinColumn(name="wifeId") private Wife wife;

总结: MySQL(基础,字段约束,索引,外键,存储过程,事务)操作语法

1. 显示数据库列表 show databases; # 查看当前所有数据库 show databases \G   #以行的方式显示 2. 在命令行中,执行sql语句 mysql -e 'show databases' -uroot -p123456 mysqlshow -uroot -p123456 # 不常用,记住上面那个就行了 3.创建数据库语法 create database 数据库名; 例如: create database `HA-test`; 4. 切换数据库 use HA-te

2-16 MySQL字段约束-索引-外键

一:字段修饰符 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table worker(id int not null,name varchar(8) not null,pass varchar(20) not null); mysql> insert into worker values(1,'HA','123456'); mysql> insert into worker values(1,'LB',null); ERROR 1048 (2

2-13-MySQL字段约束-索引-外键

高版本导出报错问题,是由于高版本对导出文件优化了权限设置, show variables like '%secure%';查看权限是NULL就代表禁止导出 在配置文件my.cnf [mysqld]下加secure_file_priv=指定导出目录 本节所讲内容: 1.  字段修饰符 2.  清空表记录 3.  索引 4.  外键 5.     视图 一:字段修饰符 (约束) 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table worker(id