我正在研究一个具有给定条件的函数,返回它的 sql,但我得到带有条件别名的 sql。
那么,有没有办法保留数据库中的原始列名,而不是用别名替换?
功能:
public String getReportSQL(Criteria criteria) {
try {
CriteriaImpl c = (CriteriaImpl) criteria;
SessionImpl s = (SessionImpl)c.getSession();
SessionFactoryImplementor factory = (SessionFactoryImplementor)s.getSessionFactory();
String[] implementors = factory.getImplementors( c.getEntityOrClassName() );
CriteriaLoader loader = new CriteriaLoader((OuterJoinLoadable)factory.getEntityPersister(implementors[0]),
factory, c, implementors[0], s.getLoadQueryInfluencers());
Field f = OuterJoinLoader.class.getDeclaredField("sql");
f.setAccessible(true);
return (String) f.get(loader);
} catch(Exception e){
throw new RuntimeException(e);
}
}
得到了:
select this_.CAR_KEY as CAR_11_0_ from DATABASE.CAR this_
预期的:
select CAR_KEY from DATABASE.CAR
提前致谢
最佳答案
声明字段“sql”的默认 Java 实现是您所获得的,我认为没有一种简单的方法可以将其更改为您想要的方式。
我的建议是解析您收到的字符串。
return ((String) f.get(loader)).replaceAll("this_.", "").replaceAll("this_", "").replaceAll("( as \\w)\\w+", "")
结果将是:
select CAR_KEY from DATABASE.CAR
关于java - 如何获取没有别名的hibernate生成的sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59751546/