@Param("myParam") 字符串 myParam 正在转换为 NVARCHAR(4000)

问题描述 投票:0回答:3

我正在使用 Hibernate(Spring 2.0.8)编写一个简单的本机查询,但是当我的参数是字符串时,它会被转换为 NVARCHAR(4000),这会导致性能问题。

贝娄是我的代码示例

@Modifying
@Query(value = "INSERTO INTO MyTable (a, b, c) SELECT :myParam1, :myParam2, a.xpto FROM myTable a WHERE a.id = :myParam3", nativeQuery = true)
void insertMyTable(@Param("myParam1") String myParam1, @Param("myParam2") String myParam2, @Param("myParam3") int myParam3);

问题是,

myParam1
myParam2
nvarchar(100)
(示例),但是当我们将分析器附加到SQLServer2008实例时,我们发现执行了以下查询

@P0 NVARCHAR(4000), @P1 NVARCHAR(4000), @P2 INTEGER

INSERTO INTO MyTable (a, b, c) SELECT @P0, @P1, a.xpto FROM myTable a WHERE a.id = @P2

这会导致从

NVARCHAR(4000)
NVARCHAR(100)
的转换,并导致性能问题。

有没有办法明确声明 @Param 及其各自的大小?像

@Param("myParam1", "nvarchar(100)")

之类的东西
java spring hibernate sql-server-2008
3个回答
1
投票

可以使用@Column注解来指定列的数据类型

  @Column(columnDefinition="VARCHAR(40)") 
   private String columnName;

  @Column(columnDefinition="text") 
      private String columnName;

0
投票

您可以将该变量的

columnDefinition
声明为模型类中的文本(这样该变量就没有限制) 像这样

    @Column(name = "content", columnDefinition = "text")
    private String content;

or
您可以直接在
database
中将该变量的数据类型设置为文本。


0
投票

您找到解决方案了吗?我也面临这个问题...

© www.soinside.com 2019 - 2024. All rights reserved.