Hibernate中遇到的 NullPointerException问题和IllegalArgumentException

本文通过实例解析了Hibernate配置文件中导致NullPointerException与IllegalArgumentException的原因,重点介绍了多对多关联映射配置及其常见错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在自己新学Hibernate的时候,对于配置文件中的各个属性,还不是很熟悉。

对于要多敲代码的程序员来说,这个低级错误也许是好的。

在我进行Hibernate中多对多表格的级联操作的时候,进行JUnit单元测试,然后出现了以下的问题,自己也捣鼓了很久时间才终于发现问题的所在。


1.NullPointerException错误

这个错误可能会在很多地方有,但是我这次的出现的是在配置文件中的配置错误所导致的。

建表用到两个实体类,分别是User.java和Role.java,所对应的配置文件就是User.hbm.java和Role.hbm.java。

配置文件的代码如下(Role.hbm.xml):

<class name="cn.itcast.manytomany.Role" table="t_role">
		<id name="role_id" column="role_id">
			<generator class="native"></generator>
		</id>
		<property name="role_name" column="role_name" ></property>
		<property name="role_desc" column="role_desc"></property>
		
		 <set name="userSet" table="user_role">
		 	<!-- 第三张表的配置
		 		key:要与用户表中的外键名称一致,否则会没法关联
	 		 -->
		 	<key column="role_id" ></key>
		 	<!-- class:是关联配置表的实体类文件的全路径
		 		column:第三张表的外键名称 
		 	 -->
		 	<many-to-many class="cn.itcast.manytomany.User" column="user_id"></many-to-many>
		 </set>
	</class>

空指针异常img01


空指针异常img02

如果在class标签中的 name属性,没有写上对应实体类的全路径,而是写了其它,就会出现了错误"NullPointerException" 的错误

错误代码:在User.hbm.xml文件中,class 中name标签的属性值为 cn.itcast.manytomany.Role,这样运行时就会出现空指针错误。

将属性值修改为对的内容之后,就可以正常运行。

2.IllegalArgumentException

这个错误是指出现了 非法争议的表达式。

代码还是同一段,在<set> 标签中,可以输入one-to-many或者 many-to-many标签,在其中的class标签属性值里,是填写与之关联的对象的全路径。

如果在这个路径中写错时,就会出现IllegalArgumentException错误了。

配置文件的代码如下(User.hbm.xml):

<class name="cn.itcast.manytomany.User" table="t_user">
		<id name="user_id" column="user_id">
			<generator class="native"></generator>
		</id>
		<property name="user_name" column="user_name" ></property>
		<property name="user_password" column="user_password"></property>
		
		 <set name="roleSet" table="user_role" cascade="save-update,delete">
		 	<!--  key标签里面配置
		 		是当前 的映射文件在第三张表的外键名称
		 	 -->
		 	<key column="user_id"></key>
		 	<!-- many-to-many中,class是与外键关联表的实体类的全路径
		 		column:角色在第三张表的外键名称
		 	 -->
		 	<many-to-many class="cn.itcast.manytomany.User"  column="role_id"></many-to-many>
		 </set>
	</class>


上面的代码中<many-to-many>标签中class的属性值写成了 "cn.tcast.manytomany.User",运行后就 会出现此错误了。


illegalArgumentException


这里只是举了例子,相信在其它的地方也会出现类似的错误,到时再根据类似的情况来角色。

说这此都是低级错误,但是对于自己刚学,在网上也没找到解决方法时,难免会有点心情不畅。

但在自己发现了问题并解决了之后,就像是豁然开朗。所以有很多事情要生存坚持,不要被小小的问题难倒了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值