-1

我有一个 jpql,想在运行时找到 jpql 中给出的基本实体的别名。可能吗?

例如SELECT home FROM HomeEntity home WHERE homeId IS NOT NULL;

我想在执行之前从查询中找出别名,在这种情况下是“home”,以便我可以在运行时修改查询,例如在ORDER BY home.createdDate执行之前向 jpql 添加一个。

4

1 回答 1

0

我最终解析了 JPQL 并使用正则表达式提取了基本实体别名。下面是代码。随意使用或改进它或提供建议。私人字符串 findBaseEntityAliasFromJPQL(String jpqlString) {

    String baseEntityAlias = null;
    Pattern pattern = Pattern.compile("SELECT.+?FROM.+?\\w+?\\s+?(\\w+)", Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(jpqlString);
    if (matcher.find()) {
        baseEntityAlias = matcher.group(1);
    }
    Assert.hasText(baseEntityAlias, "Not able to find the base Entity Alias for the JPQL Query=" + jpqlString);
    return baseEntityAlias;
}
于 2013-08-15T04:11:06.413 回答