Hibernate Update提供java.lang.NullPointerException

时间:2014-08-01 06:41:00

标签: java hibernate

我正在尝试以下代码。基本上我试图通过Hibernate更新数据库表中的一行。

ABCEntity obj = new ABCEntity ();       
obj.setMetal(MetalEnum.valueOf(metal));
obj.setName(smelter_name);
obj.setSmelterId(smelter_id);
obj.setReferenceName(smelter_name);
obj.setId((long) 117806);

try {
         // Saving in Known Smelter Table
        Transaction tx = sessionFactory.getCurrentSession().beginTransaction();


         sessionFactory.getCurrentSession().update(obj);

         tx.commit();
  } catch (Exception e) {
        logger.info("Print object "+ obj.toString());
        logger.info("Error for update: "+ e.getMessage());
  }

跟踪我得到的错误日志:

Print object   ABCEntity@447a43f7[
  id=117806
  name=XYZ  SMELTER
  smelterId=ABC001
  metal=METAL_A
  referenceName=XYZ  SMELTER
  nextSteps=<null>
  mineNames=<null>
  mineLocation=<null>
  comments=<null>
] 

Error for update: null

这里的错误是什么。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用hibernate

更新数据库中的行

第一次获取要更新的行,您可以使用findByID()方法

使用标准

public ABCEntity findById(Integer id) {
        // TODO Auto-generated method stub
        try {
            ABCEntity instance = (ABCEntity) getSession()
                    .createCriteria(ABCEntity.class)
                    .add(Restrictions.eq(IDABCENTITY, id)).uniqueResult();
            return instance;
        } catch (RuntimeException re) {
            throw re;
        }
    }

使用hql

public ABCEntity findById(Integer id) {
            // TODO Auto-generated method stub

         try {
                ABCEntity instance = (ABCEntity) getSession().get(
                        "packageofclass.ABCEntity", id);
                return instance;
            } catch (RuntimeException re) {
                log.error("get failed", re);
                throw re;
            }
        }

然后引用对象

ABCEntity obj = findById(1);

第二是更新应更改的字段,例如我想更改名称

obj.setName("new name");

然后更新你可以执行此操作的行

public void update(ABCEntity transientInstance) {
        // TODO Auto-generated method stub
        try {
            getSession().saveOrUpdate(transientInstance);
            return transientInstance;
        } catch (RuntimeException re) {
            re.printStackTrace();
            return null;
        }
    }