【问题标题】:Hibernate performance: the same base class for a lot of children休眠性能:很多孩子的同一个基类
【发布时间】:2012-09-01 11:17:31
【问题描述】:

我有很多课程 C1、C2、..、Cn (n~100)。每个类都有对其他类(子类)的引用。但是一个类可以在不同的类中引用(孩子可能有不同类型的父母)。例如,C1 可能有以下子项:C2、C3、C4。但 C2 也可能是 C4 的子代。

class C1 extends AbstractEntity{
   C2 c2;
   C3 c3;
   C4 c4;
}

class C4 extends AbstractEntity {
   C2 c2;
   C5 c5;
}

有一个实体,我想得到它的父级。所以我创建了 AbstractEntity 类

class abstract AbstractEntity{
   Long id;
   AbstractEntity parent;
}

当我在 Hibernate 中使用 JPA 注释将对象持久保存到数据库时。所以我得到以下 AbstractEntity 表:

table AbstractEntity (id long primary key, parent_id long foreign key references AbstractEntity(id), discriminator varchar(40));

现在要对具体实体执行任何操作(添加、更新、删除),将执行与 AbstractEntity 的连接。每次操作!所以所有操作都需要访问同一个表。这将如何影响性能?这是否允许我同时对不同的资源类型执行操作,它们不会阻塞吗?

我了解在事务期间并非整个表都被锁定,这在很大程度上取决于所使用的 DBMS。但总的来说,在使用hibernate时考虑为大量子类摆脱普通超类的方法可能更好?如果 DBMS 真的很重要,那就是 MySQL 和 Oracle。

【问题讨论】:

    标签: mysql oracle hibernate


    【解决方案1】:

    不同子类上的操作不会互相阻塞。 hibernate 不会自行阻塞表。看看性能是否足够好,最简单的方法就是尝试一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多