2016-04-27 2 views
0

würde Ich mag einen Menschen lesbaren String in einer Abfrage in CriteriaQuery (JPA mit Hibernate 4.3.7 Final)in SQL-Kommentar zu CriteriaQuery so ist es sichtbar in mysql langsam log

etwas hinzufügen, die wie

erscheinen würde
select count(id) 
from my_table 
where 
    'My Description Of Query Origin Name' is not null 
    and ..... 

Um mir den Ursprung oder bestimmte langsame Abfragen innerhalb meiner Anwendung zu verfolgen.

Prost

Antwort

0

fand ich einen Weg, dies zu tun, die durch die Implementierung eines Prädikats war.

Es ist ein bisschen ein Hack, aber es funktioniert.

import com.precurse.frameworks.mwf.util.StringUtil; 
import org.hibernate.jpa.criteria.CriteriaBuilderImpl; 
import org.hibernate.jpa.criteria.ParameterRegistry; 
import org.hibernate.jpa.criteria.compile.RenderingContext; 
import org.hibernate.jpa.criteria.expression.UnaryOperatorExpression; 
import org.hibernate.jpa.criteria.predicate.AbstractSimplePredicate; 

import javax.persistence.criteria.CriteriaBuilder; 
import java.io.Serializable; 

public class CommentPredicate 
     extends AbstractSimplePredicate 
     implements UnaryOperatorExpression<Boolean>, Serializable { 

    private AbstractSimplePredicate operandExpression; 

    public CommentPredicate(
     CriteriaBuilder criteriaBuilder, 
     final String _comment) { 
     super((CriteriaBuilderImpl) criteriaBuilder); 
     this.operandExpression = new AbstractSimplePredicate((CriteriaBuilderImpl) criteriaBuilder) { 
     @Override 
     public void registerParameters(ParameterRegistry registry) { 
      // do nothing 
     } 

     @Override 
     public String render(boolean isNegated, RenderingContext renderingContext) { 
      return "'" + StringUtil.escapeForSql(_comment) + "'"; 
     } 
     }; 

    } 


    @Override 
    public AbstractSimplePredicate getOperand() { 
     return operandExpression; 
    } 

    @Override 
    public void registerParameters(ParameterRegistry registry) { 
     // nothing to do 
    } 

    @Override 
    public String render(boolean isNegated, RenderingContext renderingContext) { 
     final String operator = isNegated ? " is null" : " is not null"; 
     return getOperand().render(renderingContext) + operator; 
    } 
} 

Hoffnung hilft dies jemand in der Zukunft, wenn es eine andere bessere Weg ist, ich interessiere mich sehr zu wissen, was es sein könnte!