Sql server JPA、Hibernate、SQL Server和表值参数
我将JPA与Hibernate一起使用,并希望使用表值参数调用存储过程。理想情况下,我希望使用以下内容:Sql server JPA、Hibernate、SQL Server和表值参数,sql-server,jpa,spring-data-jpa,Sql Server,Jpa,Spring Data Jpa,我将JPA与Hibernate一起使用,并希望使用表值参数调用存储过程。理想情况下,我希望使用以下内容: @Transactional @Procedure(procedureName = "test_procedure1") void testProcedure1( @Param("value1") int value1, @Param("value2") String val
@Transactional
@Procedure(procedureName = "test_procedure1")
void testProcedure1(
@Param("value1") int value1,
@Param("value2") String value2,
@Param("value3") MyTableValuedParameter value);
其中value3是表值参数
但是,如果这是不可能的,我也可以通过更直接地使用MicrosoftSQLServer驱动程序(它支持表值参数)来调用该过程。但是,我不确定在使用Spring数据时是否可能或者如何使用SQL Server驱动程序
所以我的问题是:
我无法用JPA本身解决这个问题。我需要使用SQL Server驱动程序API 所以我认为你可以这样做:
import com.microsoft.sqlserver.jdbc.SQLServerDataTable
import com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement
import javax.sql.DataSource
class YourRepository(private val dataSource: DataSource) {
open fun save(yourParameter: YourParameter): Boolean =
dataSource
.connection
.prepareStatement("{CALL test_procedure1 (?)}")
.use { statement ->
val preparedStatement = statement.unwrap(SQLServerPreparedStatement::class.java)
val dataTable = SQLServerDataTable().apply {
addColumnMetadata("value1", java.sql.Types.INTEGER)
addColumnMetadata("value2", java.sql.Types.NVARCHAR)
addColumnMetadata("value3", java.sql.Types.NVARCHAR)
addRow(yourParameter.value1, yourParameter.value2, yourParameter.value3)
}
preparedStatement.setStructured(1, "TestTVP", dataTable)
return preparedStatement.execute()
}
}
您始终可以创建一个自定义方法实现并获得一个
数据源。