我正在使用 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/422584.html
標籤:
下一篇:SQL子字串和字符索引
