Querydsl generated SQL query of wrong sql type (nvarchar instead of varchar)

Querydsl generates a stored procedure with a parameter nvarchar

for the column, but the type of the table column varchar

. Thus, MS-SQLServer cannot use its index , which significantly increases the query execution time.

The metadata used by Querydsl is generated using Querydsl MetaDataSerializer

(ant target).

How do I force Querydsl to use a stored procedure parameter varchar

for a column?


DB table:
Table X with three columns: id (int), ColA (varchar) and ColB (nvarchar)

Generated metadata:

public class QTableX extends com.mysema.query.sql.RelationalPathBase<QTableX> {

    private static final long serialVersionUID = 1142355320;

    public static final QTableX TableX= new QTableX("TableX");

    public final StringPath id = createNumber("id", Integer.class);    

    public final StringPath colA= createString("ColA");

    public final StringPath colB= createString("ColB");

    public QTableX(String variable) {
        super(QTableX.class, forVariable(variable), "dbo", "TableX");
    }

    public QTableX(Path<? extends QTableX> path) {
        super((Class)path.getType(), path.getMetadata(), "dbo", "TableX");
    }

    public QTableX(PathMetadata<?> metadata) {
        super(QTableX.class, metadata, "dbo", "TableX");
    }
}

      

Querydsl:

SQLQuery query = new SQLQueryImpl(new SQLServerTemplates());
    query.from(QTableX.TableX).where(QTableX.TableX.colA.eq("FieldName")
        .and(QTableX.TableX.colB.like(".1.")));

      

generated sql:

declare @p1 int
set @p1=NULL

-- @P0 should be varchar (not nvarchar)
exec dbo.sp_prepare @p1 output,N'@P0 nvarchar(4000),@P1 nvarchar(4000)',N'select TableX.id
    from TableX TableX
    where TableX.ColA =  @P0  and TableX.ColB like  @P1  escape ''\''',1

exec dbo.sp_execute @p1, N'FieldName', N'.1.'

      

+3
sql-server indexing querydsl


source to share


No one has answered this question yet

Check out similar questions:

1587
Insert multiple rows into one SQL query?
1252
What is the difference between varchar and nvarchar?
623
SQL update query using joins
560
What's the best way to automatically generate INSERT statements for a SQL Server table?
519
What is the difference between char, nchar, varchar and nvarchar in SQL Server?
376
How to insert line break in SQL Server VARCHAR / NVARCHAR string
255
SQL Server text type and varchar data type
218
What are the main performance differences between varchar and nvarchar SQL Server data types?
93
SQL NVARCHAR and VARCHAR Limitations
3
QueryDsl: generate wrong sql for condition with or () and not ()



All Articles
Loading...
X
Show
Funny
Dev
Pics