保留列名标准

问题描述 投票:2回答:1

我正在使用具有给定条件的函数,该函数返回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

提前感谢

java sql hibernate criteria
1个回答
0
投票

已声明字段“ sql”的默认Java实现就是您所获得的,我认为没有一种简单的方法可以将其更改为所需的方式。

我的建议是解析您收到的字符串。

return ((String) f.get(loader)).replaceAll("this_.", "").replaceAll("this_", "").replaceAll("( as \\w)\\w+", "")

结果将是:

从DATABASE.CAR中选择CAR_KEY

© www.soinside.com 2019 - 2024. All rights reserved.