hibernate jpa更新两个字段on persist并仅从一个读取

时间:2015-01-14 21:15:16

标签: java oracle hibernate jpa hibernate-mapping

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...
}

1 个答案:

答案 0 :(得分:0)

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

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

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