解释JPA Criteria API From class及其类型参数的含义

Explain the meaning of JPA Criteria API From class and its type parameters

class javax.persistence.criteria.From 的用途是什么,它的类型参数 ZX 代表什么?

文档根本不清楚。

看到类型javax.persistence.criteria.Root有如下定义后,我更加困惑了:

public interface Root<X> extends From<X,X>

它是以下的通用接口:javax.persistence.criteria.Joinjavax.persistence.criteria.Root 以在您调用其中一种方法时保持一致性:

  • javax.persistence.criteria.Join#getParent
  • javax.persistence.criteria.From#getCorrelationParent

让我们尝试使用 javax.persistence.criteria.Join#getParent 来解释 当您调用 javax.persistence.criteria.Join#getParent 结果可以是另一个 Join 或 Root 并且两者的通用接口是 javax.persistence.criteria.From

参见示例:

Root<User> user = query.from(User.class);
Join<User, Account> account = user.join(User_.account);
Join<Account, AccountRole> accountRole = account.join(Account_.accountRoles);

然后

From<?, User> root = account.getParent();// here we have Root<User> extends From<User, User>
From<?, Account> join = accountRole.getParent();// here we have Join<User, Account> extends From<User, Account>

正如您在上面的示例中看到的那样,Z 和 X 代表连接的左侧和右侧的一种类型。