我正在尝试以下代码。基本上我试图通过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
这里的错误是什么。
答案 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;
}
}