Код, который я разместил, не является кодом, используемым нашими компаниями, это просто пример кода, чтобы правильно проиллюстрировать проблему.
У меня есть следующий запрос данных Spring:
@Query(value = "FROM CustomerTable WHERE Name.firstName = ?1 AND Name.lastName = ?2")
List<Customer> findByName(String firstName, String lastName);
Для сущности Customer
:
public class Customer {
Name name;
// ...
}
и Name
:
public class Name {
String firstName;
String lastName;
// ...
}
Это работает нормально, но данные Spring передают эти параметры как NVARCHAR
вместо VARCHAR
. Следовательно, БД должна выполнять дорогостоящее преобразование, которое очень дорого.
Как я могу убедиться, что Spring Data передает эти параметры как VARCHAR
вместо NVARCHAR
?
РЕДАКТИРОВАТЬ: я знаю, что он отправляется как NVARCHAR с помощью SQL Профилировщик. Это дает мне эту информацию:
exec sp_executesql N'select customer.id as id1_7_, ...
from customers custome0_ where custome0_.first_name=@P0 and custome0_.last_name=@P1',N'@P0 nvarchar(4000),@P1 nvarchar(4000)',N'Tom',N'Cruise'