一个针对javahibernate/jpa用户的简单问题。
我有两个表(实体)a和b,它们之间有关系,因为a有多个b(一对多)。实体a在java中有一组值b。
由于读取性能问题,我想实现主细节非规范化,所以我想直接在实体a中存储原始集合对象(可能是序列化的)(因为多对一关系由于jpa读取而花费了我大量的cpu时间(更新不是问题))。
问题是,我是否可以实现这样的功能:getbs总是返回非规范化对象(因此它的速度很快),addb添加新的b来设置非规范化对象,并用新的原始数据更新非规范化对象,以便更快地读取?
它是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条答案
按热度按时间cotxawn71#
这很复杂。有更好的方法解决您的问题:
您可以简单地用dao查询替换一对多关联。因此,无论何时获取父实体,都无法获取子集合(可能它们太多了)。但是当您想要获取父级的子级时,只需运行dao查询,这也更容易过滤。
离开children集合,但使用内存缓存保存完全初始化的对象图。这听起来似乎是一个自然的选择,但最有可能的情况是,您将以一致性换取性能。