Spring Data JPA @Procedure如何为@Param设置休眠@Type

时间:2018-11-14 09:15:06

标签: java spring hibernate annotations spring-data-jpa

为简短起见,此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类型的参数一起工作?

0 个答案:

没有答案