2014-10-06 3 views
2

Я работал в спящем режиме.
ниже код работает отлично в MSSQL, но дает ошибку в MySqlОператор SQL для строк concat в MySQL и SQL Server

Код:

Criteria criteria = session.createCriteria(table1.class); 
    criteria.add(Restrictions.sqlRestriction("(select this11_.um_email as y0_ from table2 this11_ where this11_.id='"+IDvalue+"') like '%'+this_.post_id+'%'")); 

StackTrace:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '+this_.post_id+'%'' at line 1 
org.hibernate.exception.SQLGrammarException: could not execute query 
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67) 
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) 
at org.hibernate.loader.Loader.doList(Loader.java:2223) 
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) 
at org.hibernate.loader.Loader.list(Loader.java:2099) 
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94) 
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569) 
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283) 

может кто-нибудь помочь мне решённые это?

ответ

0

Mysql не позволяет использовать + с текстом; использовать CONCAT() вместо:

... like CONCAT('%', this_.post_id, '%') 

CONCAT() также работает в MSSQL.

+0

ya он отлично работает для mysql, но он не будет работать для mssql.My приложение связано с mssql и mysql. –

+0

@sejal 'CONCAT()' является частью стандарта SQL и работает также в mssql. Это решение работает как для mysql, так и для mssql. – Bohemian

+0

, когда я пытаюсь выполнить этот запрос в mssql, тогда он даст ошибку, например: «Msg 195, Level 15, State 10, Line 2 « CONCAT »не является признанным встроенным именем функции». –

0

Может это поможет

criteria.add(Restrictions.sqlRestriction("(select this11_.um_email as y0_ from table2 this11_ where this11_.id='"+IDvalue+"') LIKE CONCAT('%', {alias}.post_id ,'%')"); 
+0

Нет его не работает ... –

+0

любая новая ошибка? –

+0

не получает ошибку, но запрос генерируется неправильно. это похоже на «like»% this_.post_id%, который дает неправильный результат. –

0

Вы можете создать запрос на основе диалекта базы данных. Используйте строку customQuery в вашем Criteria.

String customQuery = ""; 
SessionFactory sessionFactory = session.getSessionFactory(); 
Dialect dialect = ((SessionFactoryImplementor) sessionFactory).getDialect(); 
String dialectString = dialect.toString(); 

if(dialectString.equals("org.hibernate.dialect.SQLServerDialect")){ 
    customQuery = "MSSQL_Query"; 
    ... 
}else if(dialectString.equals("org.hibernate.dialect.MySQLDialect") 
     || dialectString.equals("org.hibernate.dialect.MySQLInnoDBDialect") 
     || dialectString.equals("org.hibernate.dialect.MySQLMyISAMDialect")){ 
    customQuery = "MySQL_Query"; 
    ... 
} 
Смежные вопросы