我有一个特定的情况,我想知道hibernate是如何使用它的模式元数据来生成HQL的,或者如果需要的话。
因此,我遇到了需要将对象图更新到DB的情况,问题是只需要更新具有非空(或非默认值)值的字段。这是我的用例:我们有一个批量编辑功能,允许我们的后端支持团队能够为特定产品更新大约25-30个字段。因此,它们提供了产品id,并且需要更新列的值。
然而,在这种情况下使用hibernate有它的负担,我们从DB中提取整个大对象图,然后更新特定字段并执行Session.merge。不是。编辑的数量在增加,这增加了CPU利用率,现在我们必须重新设计它,使其负载增加5倍。
因此,我们希望转到生成sql查询,然后运行批处理更新(即使这意味着直接在SQL中运行它们)。然而,我想知道的是,hibernate已经巧妙地使用元数据来生成查询。如果我只能使用某种类型的拦截器,它只允许包含具有非空值的字段来生成查询。
所以这里有一个大的,模糊的问题: hibernate是如何生成查询的。有没有一个好的开始,或者有人知道以前是否有人尝试过这样的事情。
这个问题看起来像是将CSV批量上传到MySQL,但事实并非如此。批量上传/编辑主要是编辑同一个表的记录,此时字段属于10个不同的表,因此需要推断相关的joins。我只是尝试使用hibernate来避免使用脏的IF-ELSE stmt来生成SQL代码。
发布于 2012-05-08 16:31:32
我从不同的Schema进行了数据迁移,在我的开发mashine上加载、转换/合并现有的两百万条记录花了大约30分钟。所以也许还有改进的余地。
可以加快速度的事情
session.clear()来清除以前缓存的数据(否则刷新将随着时间的推移变得更加昂贵)https://stackoverflow.com/questions/10447213
复制相似问题