gpt4 book ai didi

java - hibernate jpa 更新两个字段并仅从一个字段读取

转载 作者:太空宇宙 更新时间:2023-11-04 14:14:14 25 4
gpt4 key购买 nike

针对 java hibernate/jpa 用户的一个简单问题。

我有两个表(实体)A和B,它们之间存在关系,因为A有多个B(一对多)。实体 A 在 java 中有一组值 B。

由于读取性能问题,我想实现主从非规范化,因此我想将原始 Set 对象(可能是序列化的)直接存储在实体 A 中(因为多对一关系由于 jpa 读取而花费了我很多 CPU 时间(更新不是问题))。

问题是,我可以实现类似 getBs 总是返回非规范化对象(因此速度很快)并且 addB 将新 B 添加到 Set 并使用准备更快读取的新原始数据更新非规范化对象吗?

其 Oracle 数据库。

实体示例:

class A {
Long id,
String name;
Set<B> arrayOfBs;
byte[] denormalizedArrayOfB;

getArrayOfBs() {
return (Set<B>) denormalizedArrayOfB;
}

addArrayOfBs(B b) {
//persist b
// update and persist denormalizedArray with new b
}
//getters and setters...
}

class B {
Long id;
A reference;
String x;
String y;
//getters and setters...
}

最佳答案

这很复杂。有更好的方法来解决您的问题:

  1. 您可以简单地将一对多关联替换为 DAO 查询。因此,每当您获取父实体时,您将无法获取子集合(也许它们太多了)。但是,当您想要获取父级的子级时,只需运行 DAO 查询,这也更容易过滤。

  2. 您保留子集合,但使用内存缓存来保存完全初始化的对象图。这听起来像是一个自然的选择,但您很可能会 trade consistency for performance .

关于java - hibernate jpa 更新两个字段并仅从一个字段读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27952581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com