如何在 Hibernate 应用程序中处理数据库空值?

2023-12-13

由于数据库表中的空值,我收到“org.hibernate.PropertyAccessException”。异常如何处理?

我的文件是

获取测试.java

package com.raj.java.hiberanteDemos;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class FetchTest {
public static void main(String[] args) {
Configuration cfg=new Configuration().configure("hibernate.cfg.xml");
SessionFactory factory=cfg.buildSessionFactory();
	
	Session session1=factory.openSession();
	Employee emp1=(Employee)session1.get(Employee.class,7839);
	System.out.println(emp1.getEmpno()+" "+emp1.getEname()+" "+emp1.getSal());
	session1.close();
	
	Session session2=factory.openSession();
	Employee emp2=(Employee)session2.load(Employee.class,7839);
	System.out.println(emp2.getEmpno()+" "+emp2.getEname()+" "+emp2.getSal());
	session2.close();
	
}
}

员工.java

package com.raj.java.hiberanteDemos;

import java.sql.Date;


  class Employee {
	private int empno, mgr, deptnumber;
	private String ename, job;
	private double sal, comm;
	private Date hiredate;

	public int getEmpno() {
		return empno;
	}

	public void setEmpno(int empno) {
		this.empno = empno;
	}

	public int getMgr() {
		return mgr;
	}

	public void setMgr(int mgr) {
		this.mgr = mgr;
	}

	public int getDeptnumber() {
		return deptnumber;
	}

	public void setDeptnumber(int deptnumber) {
		this.deptnumber = deptnumber;
	}

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}

	public double getComm() {
		return comm;
	}

	public void setComm(double comm) {
		this.comm = comm;
	}

	public Date getHiredate() {
		return hiredate;
	}

	public void setHiredate(Date hiredate) {
		this.hiredate = hiredate;
	}

	public String getEname() {
		return ename;
	}

	public void setEname(String ename) {
		this.ename = ename;
	}

	public double getSal() {
		return sal;
	}

	public void setSal(double sal) {
		this.sal = sal;
	}

}

休眠配置文件

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

	<session-factory>
		<property name="hbm2ddl.auto">update</property>
		<property name="dialect">org.hibernate.dialect.Oracle9Dialect
      </property>
		<property name="connection.url">someValidurl</property>
		<property name="connection.username">username</property>
		<property name="connection.password">password</property>
		<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
		<property name="hibernate.show_sql">true</property>
		<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
		<property name="hibernate.cache.use_second_level_cache">true</property>
		<mapping resource="employee.hbm.xml"></mapping>
	</session-factory>

</hibernate-configuration>

员工.hbm.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<!-- <class name="com.javatpoint.mypackage.Employee" table="employee"> <id 
		name="empid"> <generator class="assigned"></generator> </id> <property name="firstName"></property> 
		<property name="lastName"></property> </class> -->
	<class name="com.raj.java.hiberanteDemos.Employee" table="emp">
		<id name="empno" type="int" column="EMPNO">
			<generator class="increment" />
		</id>
		<property name="ename" type="java.lang.String" />
		<property name="mgr" type="int" />
		<property name="deptnumber" type="int" column="deptno" />
		<property name="job" type="java.lang.String" />
		<property name="sal" type="double" />
		<property name="comm" type="double" />
		<property name="hiredate" type="java.sql.Date" />

	</class>
</hibernate-mapping>

当我运行此应用程序时,我收到以下错误消息。

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select employee0_.EMPNO as EMPNO0_0_, employee0_.ename as ename0_0_, employee0_.mgr as mgr0_0_, employee0_.deptno as deptno0_0_, employee0_.job as job0_0_, employee0_.sal as sal0_0_, employee0_.comm as comm0_0_, employee0_.hiredate as hiredate0_0_ from emp employee0_ where employee0_.EMPNO=?
Exception in thread "main" org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of com.raj.java.hiberanteDemos.Employee.setMgr
	at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValuesWithOptimizer(PojoEntityTuplizer.java:215)
	at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:185)
	at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3232)
	at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:129)
	at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
	at org.hibernate.loader.Loader.doQuery(Loader.java:717)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
	at org.hibernate.loader.Loader.loadEntity(Loader.java:1785)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:47)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:41)
	at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:2730)
	at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:365)
	at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:346)
	at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:123)
	at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:177)
	at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
	at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862)
	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:799)
	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:792)
	at com.raj.java.hiberanteDemos.FetchTest.main(FetchTest.java:13)
Caused by: net.sf.cglib.beans.BulkBeanException
	at com.raj.java.hiberanteDemos.Employee$$BulkBeanByCGLIB$$142cfd75.setPropertyValues(<generated>)
	at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValuesWithOptimizer(PojoEntityTuplizer.java:212)
	... 19 more
Caused by: java.lang.NullPointerException
	... 21 more

我的 emp 表数据

EmpData

当我用 0 或其他一些值更新所有空值时,它工作正常。

请帮助我解决错误而不更新数据库表中的空值。

提前致谢, 拉吉


我个人建议实际“清理”数据库值,也许将列设置为不可为空。

但如果这不能做到,你可以做的是修改你的设置器,以便它检查null:

public void setComm(Double comm) {
    if(null != comm){
        this.comm = comm;

    }else{
        this.comm = 0;
    }
}

希望这可以帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Hibernate 应用程序中处理数据库空值? 的相关文章

随机推荐

  • VueJS 上传带有附加数据的图像

    我正在尝试将图像上传到服务器 同时使用以下方法传递一些附加数据 在同一发布请求中 VueJS 2 CLI 3 axios multer sharp 我在后端有 NodeJS 和 MongoDB 前端
  • Facebook api 在 openActiveSession 期间挂在“正在打开”状态

    我第一次可以正常登录 我有一个选项 用户可以在 Android 应用程序中禁用 facebook 选择此选项后 Facebook 状态将变为 关闭 当我再次使用该选项时 重新登录 API 会在回调函数中的 OPENING 处挂起 根据我发现
  • 使用 VideoWriter 从 OpenCV 打开 GStreamer 管道

    我正在使用 OpenCV 捕获和处理视频帧 我想将它们写入 h265 视频文件 我正在努力从 OpenCV 获得合适的 Gstreamer 管道 Gstreamer 本身工作得很好 特别是 我能够运行此命令 它可以非常快速地对视频进行编码
  • matplotlib:重绘前清除散点数据

    我在 imshow 地图 上有一个散点图 我想要一个点击事件来添加一个新的散点 这是我通过 scater newx newy 完成的 问题是 然后我想添加使用选择事件删除点的功能 由于没有删除 pickX PickY 函数 我必须获取选定的
  • AWS Redshift 数据透视表所有维度

    我正在遵循在 redshift 中旋转大表的方法 使用 Amazon RedShift PostgreSQL 透视表 然而 我有大量的组需要旋转 即m1 m2 如何循环遍历所有不同的值并对每个值应用相同的逻辑并为结果列名称指定别名 如果您希
  • 如果我向 application.properties 添加任何值,Spring Boot 项目就会崩溃

    我只是想将环境变量添加到我的项目中 无论我添加什么到我的application properties文件 程序崩溃并且pom xml突然变得无效并在我的 IDE 中突出显示为红色 例如 如果我将其添加到我的application prope
  • 什么时候允许调用“BarcodeScanner.GetDefaultAsync()”?

    我正在尝试使用新的Windows 8 1 服务点 API对于条形码扫描仪 如果我打电话GetDefaultAsync 从以下任何位置 它返回null App OnLaunched 第一页 Loaded 第一页OnNavigatedTo 第一
  • 直接在默认浏览器中打开Shiny App

    通常 闪亮的应用程序通过 R Studio 中的内置浏览器打开 是否可以直接在网络浏览器 例如 Google Chrome 中打开应用程序 而无需通过 R Studio 在我的 Rstudio 版本 0 98 1103 中 我可以更改运行应
  • 正则表达式匹配 JavaScript 中字符串的全部或初始部分

    我正在尝试找出一个正则表达式 它将与以下条件匹配 我要匹配的字符串 var txt This is Regex 用户可以输入如下内容 这个 有效 Th 有效 这是 有效 这是Reg 有效 这是正则表达式 有效 Tis 无效 是无效的 Reg
  • CountDownLatch 与信号量

    使用有什么好处吗 java util concurrent CountdownLatch 代替 java util concurrent Semaphore 据我所知 以下片段几乎是等效的 1 信号量 final Semaphore sem
  • 使用包含图表 5.5.0 的 JRViewer 报告和 jasper 报告打印

    当我使用 JasperReports 创建报告而不使用图表形式 Java 应用程序时 我从 jbutton 调用它 我在 JRViewer 上收到报告 这意味着当我没有在此报告中放入任何图表时 我的应用程序会生成报告 但一旦我修改此报告并添
  • 当软件包已安装时,Conda 需要 20 多分钟来解决环境问题

    当我输入时尝试运行conda update n base conda conda 在 解决环境 上挂了大约 20 分钟 然后返回了一个不包含 conda 更新版本的软件包计划 下面提供了退回的包裹计划 NOTE conda update a
  • 使用 C# 以编程方式检测 Windows 登录尝试

    我想开发一个 Windows 窗体应用程序来监视我的网络计算机登录 注销和登录尝试详细信息 并根据检测执行某些操作 例如向管理员发送一些通知 我尝试过的 我读到了有关 Windows 服务 Windows 任务计划程序和使用任务计划程序进行
  • 如何在 Java 中打开 equals 语句以接受多个参数?

    我有一个梦想 在这个梦中 我可以替换这样的结构 if aLongVariableName equals classInstance aPropertyOfThatInstance aLongVariableName equals class
  • 如何使用 swift 4 在 iOS 11 上播放声音?我把 mp3 文件放在哪里?

    我看了很多教程 但是当我单击按钮 激活功能播放声音 时 声音不播放 我看到了 stackoverflow 推荐的代码 但什么也没有 我把mp3文件信息asset xcasset 这是正确的 SWIFT 4 Xcode 9 1 import
  • 自动将 Excel 文件转换为 Google Sheets

    我有一个使用保存电子邮件和附件插件的谷歌帐户 https chrome google com webstore detail save emails and attachmen nflmnfjphdbeagnilbihcodcopheceb
  • Pandas 无法计算具有重复轴的 isin

    我的数据框是这样的 userid codeassigned timestamp 15 553938 M1 1499371200000 15390 527638 M2 1599731200000 15389 521638 M2 1399901
  • 一个类只有 5 个实例 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我希望在整个应用程序生命周期中只有 5 个类的实例 我怎样才能实现这个目标 如果
  • 此版本的应用程序未配置为通过 Google Play 计费[重复]

    这个问题在这里已经有答案了 可能的重复 此版本的应用程序未配置为通过 Google Play 计费 我已经在 Android 市场上有一个应用程序 带有应用程序内购买 我的问题是应用内购买功能无法正常工作 我再次重写了代码 现在我想运行该应
  • 如何在 Hibernate 应用程序中处理数据库空值?

    由于数据库表中的空值 我收到 org hibernate PropertyAccessException 异常如何处理 我的文件是 获取测试 java package com raj java hiberanteDemos import o