我正在使用带有 Joined 继承策略的 OpenJPA(InheritanceType.JOINED - 所以超类中的所有字段都有一个表,子类表只包含在子类中添加的任何内容的字段,以及对超类的引用桌子)。假设我有一个超类 Person 和许多子类:TypeAPerson、TypeBPerson 等。当有如下查询时:
@NamedQuery(
name="Person.findByName",
query="SELECT p FROM Person p WHERE p.name = :name")
据我所知,我不会得到 Person 实例,而是正确的子类实例。如此处所述,为了实现这一点并获得正确的子类,OpenJPA 将进行多个连接(每个子类一个)。这具有相当糟糕的性能,特别是如果我有很多子类。我的问题是,是否有任何方法可以通过提示 JPA 加入哪个表来避免这种情况?我想到的第一件事是使用鉴别器值。OpenJPA 支持使用加入策略的鉴别器,所以它应该能够从鉴别器值中确定一个子类(从而确定一个合适的加入表)?有没有办法做到这一点?有没有其他方法可以避免不必要的数据库连接?