为简短起见,此DB @Procedure批注将起作用:
public interface PersonRepository extends CrudRepository<Person, Long> {
@Procedure(procedureName = "MOVE_TO_HISTORY")
boolean movePersonToHistory(@Param("person_id_in") int personId);
}
使用Jackson JsonNode类型的(我的数据库希望将JSON类型作为输入变量类型),这不会:
public interface PersonRepository extends CrudRepository<Person, Long> {
@Procedure(procedureName = "MOVE_TO_HISTORY")
boolean movePersonToHistory(@Param("in_params_json") JsonNode personPropsJsonNode);
}
我通过使用@Type注释解决实体模型中jdbc驱动程序未定义的JsonNode,并提供了(从AbstractSingleColumnStandardBasicType扩展) JsonNodeBinaryType定义:
@Type( type = "json-node")
private JsonNode params;
但是@Param批注不支持输入除参数名称之外的任何内容...
现在,我使用StoredProcedureQuery来查询数据库工作:
StoredProcedureQuery storedProcedure = entmanager.createStoredProcedureQuery("***")
.registerStoredProcedureParameter("in_params_json",
JsonNodeBinaryType.class , ParameterMode.IN);
storedProcedure.setParameter("in_params_json", jsonNodeParam); // - jsonNodeParam is of type JsonNode
所以,问题是,是否有必要使@Procedure批注与JsonNode类型的参数一起工作?