我正在使用 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)")
uj5u.com熱心網友回復:
您可以columnDefinition像這樣在模型類中將該變數宣告為文本(該變數沒有限制)
@Column(name = "content", columnDefinition = "text")
private String content;
or您可以直接將該變數的資料型別設定為database.
uj5u.com熱心網友回復:
可以使用@Column注解指定列的資料型別
@Column(columnDefinition="VARCHAR(40)")
private String columnName;
或者
@Column(columnDefinition="text")
private String columnName;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/337479.html
標籤:爪哇 春天 休眠 sql-server-2008
