2017-05-16 1 views
0

je trouve une requête étrange mise en œuvre dans mon projet, quand je debug et inspectez l'objet persistance.query juste avant d'appeler la méthode getResultList(), le queryString j'ai trouvé est:Qu'est-ce que « bw_and » dans veille prolongée requête

FROM AuthorityTbl a WHERE bw_and(a.setupFiltersIn, :setupFiltersIn) <> 0

Cette requête fonctionne correctement et récupère toutes les données de la table d'autorité où setupFiltersIn =: setupFiltersIn.

Je ne suis pas encore capable de comprendre ce qu'est bw_and dans cette syntaxe de requête. Quelqu'un a-t-il pu avoir une idée? J'utilise sqlServer2014 et la requête directe avec bw_et n'est pas acceptable par sqlServer.

+1

Il est une syntaxe [opération Bitwise] (https://en.wikipedia.org/wiki/Bitwise_operation) pour ** au niveau du bit ET **. –

+0

Aah, c'est vrai. Dans mon application, sqlServerDilact est redéfini et bw_and est enregistré en tant qu'opérateur au niveau du bit. C'est pourquoi cela est spécifique à mon application. Merci @chsdk –

Répondre

0

Dans Ma demande ci-dessous classe est utilisée qui enregistrent bw_and comme opérateur au niveau du bit

public class ExtendedMSSQLServerDialect extends SQLServerDialect { 

    public ExtendedMSSQLServerDialect() { 
     super(); 
     registerFunction("bw_and", new BitwiseSQLFunction(BitwiseSQLOperator.AND, "bw_and")); 
     registerFunction("bw_or", new BitwiseSQLFunction(BitwiseSQLOperator.OR, "bw_or")); 
     registerFunction("cast_text_to_varchar_of_length", new CastTextToVarcharSQLFunction("cast_text_to_varchar_of_length")); 
    } 
}