私は jpql を持っており、実行時に jpql で指定された基本エンティティのエイリアスを見つけたいと考えています。出来ますか?
例えばSELECT home FROM HomeEntity home WHERE homeId IS NOT NULL;
ORDER BY home.createdDate
この場合、実行前にクエリから「ホーム」のエイリアスを見つけて、実行前にjpqlに追加するなど、実行時にクエリを変更できるようにします。
最終的に JPQL を解析し、正規表現を使用して基本エンティティ エイリアスを引き出しました。以下はコードです。自由に使用したり、改善したり、提案を提供したりしてください。プライベート文字列 findBaseEntityAliasFromJPQL(文字列 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;
}