我正在使用具有给定条件的函数,该函数返回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);
}
}
Got:
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+", "")
结果将是:
从DATABASE.CAR中选择CAR_KEY