在Criteria hibernate String中获取特定值

时间:2015-11-13 10:07:40

标签: java regex hibernate hibernate-criteria

我需要在条件String上提取一些值。 这个概念是获取真正的SQL语句及其参数(无日志)

目前,我用它来获取选择:

CriteriaImpl c = (CriteriaImpl) criteria;
       SessionImpl s = (SessionImpl)c.getSession();
       SessionFactoryImplementor factory = s.getFactory();
       CriteriaQueryTranslator translator=new CriteriaQueryTranslator(factory,c,c.getEntityOrClassName(),CriteriaQueryTranslator.ROOT_SQL_ALIAS);
       String[] implementors = factory.getImplementors( c.getEntityOrClassName() );

       CriteriaJoinWalker walker = new CriteriaJoinWalker((OuterJoinLoadable)factory.getEntityPersister(implementors[0]), 
                               translator,
                               factory, 
                               c, 
                               c.getEntityOrClassName(), 
                               s.getLoadQueryInfluencers());


       String sql=walker.getSQLString();

结果:

select this_.ID_ELEMENTO as ID1_72_32_, this_2_.ACTIVO as[....]where this_2_.FECHA_BAJA is null and this_2_.ID_TIPO_ELEMENTO=? and this_2_.ACTIVO=? order by this_.ID_ELEMENTO asc

最接近获取参数的东西:

CriteriaQueryTranslator subCriteria= new CriteriaQueryTranslator(factory, c, c.getEntityOrClassName(), CriteriaQueryTranslator.ROOT_SQL_ALIAS);


       String root =subCriteria.getRootCriteria().toString();

结果:

CriteriaImpl(com.itym.pojo.elementos.antenas.AntenaAnalogicaPojo:elemento[Subcriteria(tipoElemento:tipoElemento)][fechaBaja is null, tipoElemento=ANTENA, activo=true])

我需要“TipoElemento”和“activo”值来替换第一个字符串。

我经常尝试表达,但不要离开我。

如果有人知道如何或以其他方式获得真正的选择,将非常感激!

1 个答案:

答案 0 :(得分:0)

我认为这就是你想要的,如果不是,请纠正我: 这个正则表达式都可以消除这两个值

/tipoElemento=([A-Za-z]*).*activo=([A-Za-z]*)/