Java EclipseLink是否能够在多任务继承的情况下打印FROM子句中的联接

Java EclipseLink是否能够在多任务继承的情况下打印FROM子句中的联接,java,orm,eclipselink,Java,Orm,Eclipselink,请有人解释一下,EclipseLink是否可以在FROM子句而不是WHERE子句中打印join语句,以连接实体的继承表(InheritanceType.join) 这种情况可以通过以下实体来说明: @Table(name = "TEST_ROOT_ENTITY") @Entity(name = "test$RootEntity") @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorC

请有人解释一下,EclipseLink是否可以在FROM子句而不是WHERE子句中打印join语句,以连接实体的继承表(InheritanceType.join)

这种情况可以通过以下实体来说明:

@Table(name = "TEST_ROOT_ENTITY")
@Entity(name = "test$RootEntity")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "ENTITY_TYPE", discriminatorType = DiscriminatorType.INTEGER)
@DiscriminatorValue("0")
public class RootEntity extends StandardEntity {
@JoinColumn(name = "ROOT_REF_ENTITY_ID")
    @ManyToOne(fetch = FetchType.LAZY)
    private RootReferenceEntity rootReferenceEntity;
    ....
}

@Table(name = "TEST_CHILD_ENTITY")
@Entity(name = "test$ChildEntity")
@PrimaryKeyJoinColumn(name = "CHILD_ID", referencedColumnName = "ID")
@DiscriminatorValue("1")
public class ChildEntity extends RootEntity {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "REF_ENTITY_ID")
    protected ReferenceEntity referenceEntity;
    ....
}

@Table(name = "TEST_ANOTHER_CHILD")
@Entity(name = "test_AnotherChild")
@PrimaryKeyJoinColumn(name = "CHILD_ID", referencedColumnName = "ID")
@DiscriminatorValue("2")
public class AnotherChild extends ChildEntity {
    ....
}
查询是:
从test$childe实体中选择e

查询正在使用以下提示(FetchGroup):

“e.referenceEntity”->“eclipselink.left join fetch” “e.rootReferenceEntity”->“eclipselink.left join fetch”

生成的sql:

SELECT t1.ID AS a1, t1.ENTITY_TYPE AS a2, t1.DELETE_TS AS a3, t1.DELETED_BY AS a4, t1.ROOT_ATTR AS a5, t1.VERSION AS a6, t1.ROOT_REF_ENTITY_ID AS a7, t2.REF_ENTITY_ID AS a8, t0.ID AS a9, t0.DELETE_TS AS a10, t0.DELETED_BY AS a11, t0.NAME_ AS a12, t0.VERSION AS a13, t4.ID AS a14, t4.DELETE_TS AS a15, t4.DELETED_BY AS a16, t4.VERSION AS a17 
FROM TEST_ROOT_ENTITY t1 
     LEFT OUTER JOIN TEST_ANOTHER_CHILD t3 ON (t3.CHILD_ID = t1.ID) 
     LEFT OUTER JOIN TEST_ROOT_REFERENCE_ENTITY t4 ON (t4.ID = t1.ROOT_REF_ENTITY_ID)
,TEST_CHILD_ENTITY t2 
     LEFT OUTER JOIN TEST_REFERENCE_ENTITY t0 ON (t0.ID = t2.REF_ENTITY_ID) 
WHERE (((t1.DELETE_TS IS NULL) AND (t2.CHILD_ID = t1.ID)) AND (t1.ENTITY_TYPE IN (?, ?))) LIMIT ? OFFSET ?
问题是与TEST_CHILD_实体(t2)的连接位于WHERE子句(
和(t2.CHILD_ID=t1.ID)
)中。在这个简单的查询中,这不会影响性能,但如果有许多联接字段,这可能是一个问题,例如在PostgreSQL数据库上(即,如果联接计数大于联接\折叠\限制属性)

问题是我们是否可以强制EclipseLink对继承的表使用内部联接。例如,OpenJpa在这种情况下使用内部联接