我试图使用JPA 2.1@NamedStoredProcedureQuery调用一个存储过程。我的实体类中有以下注释。
问题是,如果我将模式声明为ParameterMode,则无法传递空值。在里面只有当我声明为ParameterMode时,才能传递null值。伊努特。
实体
@NamedStoredProcedureQuery(name = "employee", procedureName = "myProcedure", resultClasses = Employee.class, parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "EMPLOYEE_PHONE", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.INOUT, name = "CITY", type = String.class)
存储库
public Long createOrUpdateEmployee(Employee employee) throws EbaDataException {
StoredProcedureQuery query = entityManager.createNamedStoredProcedureQuery("employee");
query.setParameter("EMPLOYEE_PHONE", employee.getName());
query.setParameter("CITY", employee.getCity());
query.execute();
}
例如,如果我用ParameterMode传递null。对于索引2(城市),我得到了这个例外。
Caused by: java.sql.SQLException: Missing IN or OUT parameter at index:: 2
根据本主题,不能将空值作为参数传递。
我的解释是,JPA(特别是Hibernate)根本不支持设置空参数。看起来他们正在努力支持默认参数值,而不是在适当的时候替换空值。他们选择支持前者。看起来那些需要支持后者(可空值)的人必须使用java。sql。可赎回声明
您也可以始终尝试将空字符串而不是空字符串,我认为它应该可以工作。
我在JPA repository类中编写了一个查询,如下所示: 上述查询的问题是,如果参数:和都为空,则需要获取所有记录,而这不会发生。到目前为止,没有获取任何记录。 基本上,我希望编写的查询能够正确地适用于所有情况,即参数和都采用空值和非空值。 在这方面,我已经了解了CriteriaBuilder的概念,但无法正确掌握该概念以实现我的案例。 有人能帮忙吗?谢谢 编辑 我已经在控制台中记录了查询,
将变量绑定到本机查询时出错。EclipseLink(JPA2.1) 内部异常:org.PostgreSQL.util.psqlException:错误:“$1”位置或附近的语法错误:12错误代码:0线程“awt-eventqueue-0”javax.Persistence.persistenceException:Exception[EclipseLink-4002](Eclipse Persis
问题内容: 我需要搜索某个进程并杀死该进程。我写了这样的命令: 进程名称为。但这是行不通的。我如何才能按名称及其名称查找流程。 问题答案:
我是JPA新手,这里是我的一个查询,我有几个参数作为查询的一部分,任何参数都可以是空值
问题内容: 我有一个数据类型: 另外,数据库字段类型是 现在我正在这样做: 如何才能做到这一点。 问题答案: 使用
问题内容: 如果将空列表传递到JPA查询中,则会收到错误消息。例如: 由于列表为空,因此Hibernate在SQL中将其生成为“ IN()”,这给我Hypersonic数据库错误。 在Hibernate问题跟踪中有一张票证,但是那里没有太多评论/活动。我也不知道其他ORM产品或JPA规范中的支持。 我不喜欢每次都要手动检查空对象和空列表的想法。是否有一些众所周知的方法/扩展?您如何处理这些情况?