我有一个特定的情况,我想知道 hibernate 如何使用它的模式元数据来生成 HQL 或者如果需要的话。
因此,我遇到了需要将对象图更新到 DB 的情况,交易是只有具有非空(或非默认)值的字段需要更新。这是我的用例:我们有一个批量编辑功能,它允许我们的后端支持团队能够为特定产品更新大约 25-30 个字段。因此,他们提供产品 ID,并且需要更新该列的值。
然而,在这种情况下使用休眠是有其代价的,我们从数据库中提取整个大对象图,然后更新特定字段并执行 Session.merge。作为没有。编辑数量正在增加,这增加了 CPU 使用率,现在我们必须重新设计它,使其负载增加 5 倍。
所以我们想转向生成 sql 查询,然后运行批量更新(即使这意味着直接在 SQL 中运行它们)。但是我想知道,hibernate 已经巧妙地使用元数据来生成查询。如果我只能使用某种拦截器,它只允许包含非空值的字段用于查询生成。
所以这是一个大而模糊的问题:hibernate 如何生成查询。是否有一个好的起点,或者有人知道以前是否曾尝试过类似的事情。
这个问题可能看起来像将 CSV 批量上传到 MySQL,但事实并非如此。批量上传/编辑主要是编辑同一张表的记录,在这种情况下,字段属于10个不同的表,因此需要推断相关的连接。我只是想使用休眠来避免脏的 IF-ELSE stmt 生成 SQL 代码。