我有一个 jpql,想在运行时找到 jpql 中给出的基本实体的别名。可能吗?
例如SELECT home FROM HomeEntity home WHERE homeId IS NOT NULL;
我想在执行之前从查询中找出别名,在这种情况下是“home”,以便我可以在运行时修改查询,例如在ORDER BY home.createdDate
执行之前向 jpql 添加一个。
我最终解析了 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;
}