由于数据库表中的值为空,我得到“ org.hibernate.PropertyAccessException” 。如何处理异常?
我的档案是
FetchTest.java
FetchTest.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();
}
}
Employee.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;
}
}
hibernate.cfg.xml
<?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>
employee.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>
When I ran this application I am getting below error message.
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值时,它的工作
正常。
请帮助我解决错误而不更新数据库
表中的空值。
Thanks in Advance
我个人建议实际“清理”数据库值,也许将列设置为不可为空。
但是,如果不能这样做,则可以修改设置器,以便检查 null
:
public void setComm(Double comm) {
if(null != comm){
this.comm = comm;
}else{
this.comm = 0;
}
}
希望这可以帮助
问题内容: 如何从Node.js中的HTTP 方法提取表单数据()和文件上传? 我已经阅读了文档,谷歌搜索并没有发现任何东西。 有图书馆还是黑客? 问题答案: 如果使用Express(用于Node.js的高性能,高级Web开发),则可以执行以下操作: HTML: API客户端: Node.js :( 自Express v4.16.0起) Node.js :( 适用于Express <4.16.0)
问题内容: 我正在使用MySQL数据库,我想知道是否同时进行多个(500个或更多)查询以便从多个表中获取信息,这些查询如何处理?顺序还是并行? 问题答案: 查询总是在多个会话(即客户端连接)之间并行处理。单个连接上的所有查询都一个接一个地运行。可以根据您可用的服务器资源来配置多个连接之间的并行度。 通常,某些操作在各个查询会话之间被保护(称为事务)。这些由InnoDB后端支持,但MyISAM表不受
我使用spring解析数据json,格式如下: 请求 答复: 这是我在课堂上的方法: 在调用API之后,解析数据,下一步将按行归属消息插入数据。然后循环获取列表中的数据 当我运行此方法时,我可以从json数据中获取结果,但只有3个字段无法获取值,并且为null: 如何获得msisdn、total\u调用、total\u循环持续时间的值?非常感谢
问题内容: 我有一个包含Glassfish 3.1.2.2,MySQL数据库和Swing客户端应用程序的3层应用程序。是否有可能处理数据库服务器崩溃? 我试图在应用程序运行期间停止MySQL服务。然后,每当我尝试通过我的Facade会话bean之一访问数据库时,我都会获得javax.ejb.EJBAccessException异常。 我想通知用户该数据库当前已关闭。此外,我想将我的应用程序设置为“
问题内容: 人们如何处理Docker容器的持久性存储? 我当前正在使用这种方法:构建映像(例如针对PostgreSQL),然后使用以下命令启动容器 恕我直言,这有一个缺点,我绝对不能(偶然)删除容器“ c0dbc34fd631”。 另一个想法是将主机卷“-v”安装到容器中,但是, 用户ID 的容器内不一定匹配 用户ID 从主机,然后权限可能会混乱。 注意:例如,您可以使用where 是分配给仅数据
问题内容: 该声明是 并通过java.sql.PreparedStatement’stmt’插入参数 如果为null,则在每种情况下该语句均不返回任何行,因为它始终为false(应为)。一种解决方案是 但是然后我必须两次设置相同的参数。有更好的解决方案吗? 谢谢! 问题答案: 我一直按照您在问题中所表现的方式来做。两次设置相同的参数不是很大的困难,不是吗?