作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有这样的需求。
protected Integer[] updateFullTable(final Class clazz){
final ProjectionList projectionList=Projections.projectionList().add(Projections.property("id"),"id");
final Criteria criteria=session.createCriteria(clazz)
.add(Restrictions.eq("typeOfOperation",1))
.add(Restrictions.eq("performUpdate",true));
criteria.setProjection(projectionList);
final List idsList=criteria.list();
final Integer[]ids = transformObjectArrayIntoIntegerArray(idList);
//NOW WE UPDATE THE ROWS IDS.
final Query query=session.createQuery("update "+clazz.getName()+" set activeRegister=true and updateTime=:updateTime where id in (:ids)")
.setParameter("updateTime",new Date())
.setParameterList("ids",ids);
query.executeUpdate();
return transform;
}
正如你们所看到的,有时我需要更新表中的所有行,我查询所有行 ID,然后在单独的查询中将更新应用到这些 ID,但表有时有很多记录介于两者之间30 秒到 10 分钟取决于表格。
我已将此代码更改为只有一个这样的更新。
final Query query=session.createQuery("update "+clazz.getName()+" set activeRegister=true and updateTime=:updateTime where typeOfOperation=1 and performUpdate=true");
通过唯一的查询,我避免了第一个查询,但我不能再返回受影响的 ID。但是后来要求改了一个
final StringBuilder logRevert;
添加了参数。
需要存储更新后的 ID,以便在需要时将直接反向更新应用到数据库中。
但是随着我的更新,我无法再获取 ID。我的问题是如何使用存储过程或数据库或 hibernate 中的一些解决方法获取或返回受影响的 ID 我的意思是仅通过一个查询或增强代码获得第一个行为..
任何提示。
我试过了
但不知何故时间仍然很高。
我想要类似的东西
query.executeUpdate(); // RETURNS THE COUNT OF THE AFFECTED ROWS
但是我需要受影响的ID......
抱歉,如果问题很简单。
更新
对于@dmitry-senkovich,我可以使用 rawSQL 来完成,但不能使用 hibernate,这里提出了一个单独的问题。
https://stackoverflow.com/questions/44641851/java-hibernate-org-hibernate-exception-sqlgrammarexception-could-not-extract-re
最佳答案
下面的解决方案呢?
SET @ids = NULL;
UPDATE SOME_TABLE
SET activeRegister = true, updateTime = :updateTime
WHERE typeOfOperation = 1 and performUpdate = true
AND (SELECT @ids := CONCAT_WS(',', id, @ids));
SELECT @ids;
关于Java Hibernate 关于更新所有表字段性能的技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44604763/
我是一名优秀的程序员,十分优秀!