如何从 javax. persistence. criteria.Path 获取当前节点名称

How to get the current node name from a javax.​persistence.​criteria.Path

有没有办法获取 Path 实例的当前节点名称(或整个链)?据我所知,Path 中没有方法可以这样做。我尝试了 toString() 方法,但在 EclipseLink 中未覆盖该方法(它为您提供默认输出:org.eclipse...PathImpl@331a119a)。

我正在使用 EclipseLink,因此 EclipseLink 特定解决方案对我来说没问题。

当我检查我想获取使用调试器的名称的路径时,我注意到 Path 的 EclipseLink 实现有一个名为 currentNodeQueryKeyExpression 类型的字段,它具有我想要的名字。所以我写了一个实用方法:

public static QueryKeyExpression getCurrentNode(Path<?> path) {
  try {
    return (QueryKeyExpression) ReflectionUtils.getValue(path, "currentNode");
  }
  catch (NoSuchFieldException ex) {
    throw new IllegalStateException(ex);
  }
}

这让我可以得到这样的名字:

JpaUtils.getCurrentNode(path).getName()

另请参阅:

  • How to get the fields in an Object via reflection?