【发布时间】:2020-01-15 12:32:40
【问题描述】:
我正在研究一个具有给定条件的函数,它返回 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 传递给一个 JASPER 文件,然后打印报告而不是传递对象列表或其他东西
标签: java sql hibernate criteria