0

作为查询的一部分,我已经关注

nameQuery = " AND (lower(templateInformation.name) LIKE lower('%' || :name || '%'))";

当仅此名称参数超过 4001 个字符时,将引发以下异常。

Caused by: se.cambio.platform.sdk.common.service.ServiceException: org.hibernate.exception.GenericJDBCException: could not extract ResultSet [at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert():54], Caused by: java.sql.SQLException: The data types varchar and ntext are incompatible in the add operator. [at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic():372]
at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)
at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2886)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2328)
at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:638)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:506)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:979)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:56)
at org.hibernate.loader.Loader.getResultSet(Loader.java:2036)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1836)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1815)
at org.hibernate.loader.Loader.doQuery(Loader.java:899)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
at org.hibernate.loader.Loader.doList(Loader.java:2522)
at org.hibernate.loader.Loader.doList(Loader.java:2508)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2338)
at org.hibernate.loader.Loader.list(Loader.java:2333)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:490)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1269)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)

我发现这篇文章解释了为什么会发生这种情况。但在我的情况下,如果 name 参数的字符小于或等于 4001,则不会发生任何事情。并且表列类型是 nvarchar(255)。有人可以解释这种情况吗?

4

1 回答 1

1

你需要使用CONCAT函数来连接 MySQL 中的字符串

返回由连接参数产生的字符串。可能有一个或多个参数。

于 2013-06-28T04:29:03.097 回答