hibernatejpa更新perssit上的两个字段,并且只从一个字段读取

gstyhher  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(333)

一个针对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...
}
cotxawn7

cotxawn71#

这很复杂。有更好的方法解决您的问题:
您可以简单地用dao查询替换一对多关联。因此,无论何时获取父实体,都无法获取子集合(可能它们太多了)。但是当您想要获取父级的子级时,只需运行dao查询,这也更容易过滤。
离开children集合,但使用内存缓存保存完全初始化的对象图。这听起来似乎是一个自然的选择,但最有可能的情况是,您将以一致性换取性能。

相关问题