java hibernate / jpa用户的一个简单问题。
我有两个表(实体)A和B,关系为A有很多B(一对多)。实体A在java中具有一组值B.
由于读取性能问题,我想实现master-details非规范化,所以我想直接在实体A中存储原始Set对象(可能是序列化的)(因为多次到一次的关系因为jpa读取而花费了很多cpu时间(更新不是问题))。
问题是,我可以实现类似的事情getBs总是返回非正规化对象(因此它的速度快)和addB将新B添加到Set并使用为更快读取而准备的新原始数据更新非规范化对象吗?
它的oracle db。
实体示例:
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...
}
答案 0 :(得分:0)
这很复杂。有更好的方法来解决您的问题:
您可以简单地用DAO查询替换一对多关联。因此,每当您获取父实体时,您将无法获得子集合(可能它们太多了)。但是当你想得到一个父母的孩子时,你只需要运行一个DAO查询,这也更容易过滤。
您保留子集合,但使用内存缓存来保存完全初始化的对象图。这可能听起来像是一个自然的选择,但很可能你会去trade consistency for performance。