针对 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...
}
最佳答案
这很复杂。有更好的方法来解决您的问题:
您可以简单地将一对多关联替换为 DAO 查询。因此,每当您获取父实体时,您将无法获取子集合(也许它们太多了)。但是,当您想要获取父级的子级时,只需运行 DAO 查询,这也更容易过滤。
您保留子集合,但使用内存缓存来保存完全初始化的对象图。这听起来像是一个自然的选择,但您很可能会 trade consistency for performance .
关于java - hibernate jpa 更新两个字段并仅从一个字段读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27952581/