解释JPA Criteria API From class及其类型参数的含义
Explain the meaning of JPA Criteria API From class and its type parameters
class javax.persistence.criteria.From 的用途是什么,它的类型参数 Z
和 X
代表什么?
文档根本不清楚。
看到类型javax.persistence.criteria.Root有如下定义后,我更加困惑了:
public interface Root<X> extends From<X,X>
它是以下的通用接口:javax.persistence.criteria.Join
和 javax.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 代表连接的左侧和右侧的一种类型。
class javax.persistence.criteria.From 的用途是什么,它的类型参数 Z
和 X
代表什么?
文档根本不清楚。
看到类型javax.persistence.criteria.Root有如下定义后,我更加困惑了:
public interface Root<X> extends From<X,X>
它是以下的通用接口:javax.persistence.criteria.Join
和 javax.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 代表连接的左侧和右侧的一种类型。