gpt4 book ai didi

java - Spring Data @Query 使用 VARCHAR 而不是 NVARCHAR

转载 作者:行者123 更新时间:2023-12-01 17:19:28 25 4
gpt4 key购买 nike

我发布的代码不是我们公司使用的代码,它只是正确说明问题的示例代码。

我有以下 Spring 数据查询:

@Query(value = "FROM CustomerTable WHERE Name.firstName = ?1 AND Name.lastName = ?2")
List<Customer> findByName(String firstName, String lastName);

对于实体客户:

public class Customer {
Name name;
// ...
}

名称:

public class Name {
String firstName;
String lastName;
// ...
}

这工作正常,但 Spring 数据将这些参数作为 NVARCHAR 而不是 VARCHAR 传递。因此,DB必须执行非常昂贵的昂贵转换。

如何确保 Spring Data 将这些参数作为 VARCHAR 而不是 NVARCHAR 传递?

编辑:我知道它作为 NVARCHAR 发送的方式是使用 SQL Profiler。这为我提供了以下信息:

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'

最佳答案

我设法通过将数据库中的列类型更改为 NVARCHAR 来避免昂贵的转换,但随后我还必须向 添加一个 @Type 注释我的 Customer 实体上的 >Name 实例变量:

public class Customer {
@Type(type="org.hibernate.type.StringNVarcharType")
Name name;
// ...
}

这可行,但它不是首选解决方案,因为它不是 JPA 规范的一部分。

关于java - Spring Data @Query 使用 VARCHAR 而不是 NVARCHAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61323485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com