Использование пользовательских диалектов для HQL.Вместо использования || создайте свою собственную функцию с именем concat.Затем в диалекте SQL Server добавьте это в конструктор:
registerFunction("concat", new VarArgsSQLFunction(Hibernate.STRING, "", "+", ""));
Вам не нужно менять диалект Oracle, потому что у Oracle уже есть функция concat, поэтому она просто проходит, но для других функций,вам может потребоваться зарегистрировать новые функции в обоих.
Для запросов SQL, поскольку вы все равно строите их динамически, вы можете использовать методы базового класса, например super.addBitAndClause (leftSide, rightSide).
Вы даже можете перейти к диалекту динамически, хотя Hibernate не упростил его, включив интерфейс:
Dialect d = ((SessionFactoryImpl)sessionFactory).getDialect()