zoukankan      html  css  js  c++  java
  • JPA setParameter 传入null参数

    JPA setParameter 传入null参数

    JPA调用HQL或native SQL、namedQuery语句时

    字符串类型的字段传入null没问题,但是数字类型的传入null时会报错,如

    java.sql.SQLException: ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 BINARY

    奇怪的是网上找了一圈,居然没找到简单的解决方法,作为c# coder很怀念DbNull.value啊。自己研究了一下,发现可以简单解决掉,

    解决问题是通过Query的该重载方法:

    <T> Query setParameter(Parameter<T> param, T value);

    如:

        query.setParameter(new Parameter<Integer>() {
            @Override
            public String getName() {
                return "xxId";
            }
    
            @Override
            public Integer getPosition() {
                return null;
            }
    
            @Override
            public Class<Integer> getParameterType() {
                return Integer.class;
            }
        }, xxId);

    为方便使用,封装一个泛型的参数类,提供静态方法用来实例化:

    public class JpaParameter<T> implements Parameter<T> {
        private String parameterName;
        private Integer position;
        private Class<T> type;
    
        private JpaParameter(Class<T> type, String parameterName) {
            this.type = type;
            this.parameterName = parameterName;
        }
    
        private JpaParameter(Class<T> type, Integer position) {
            this.type = type;
            this.position = position;
        }
    
        public static Parameter of(Class<?> type, String name) {
            return new JpaParameter(type, name);
        }
    
        public static Parameter of(Class<?> type, Integer position) {
            return new JpaParameter(type, position);
        }
    
        @Override
        public String getName() {
            return parameterName;
        }
    
        @Override
        public Integer getPosition() {
            return position;
        }
    
        @Override
        public Class<T> getParameterType() {
            return type;
        }
    }

    传入参数:

    query.setParameter(JpaParameter.of(Integer.class, "xxId"), xxId);
  • 相关阅读:
    hexo博客搭建
    HDFS基本命令
    hadoop简单排序
    HBase实验
    linux版python升级依赖项问题
    hadoop大数据生态安装
    linux-anoconda更换镜像
    [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:排序、筛选和分页
    [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:实现基本的CRUD功能
    [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:建立一个EF数据模型
  • 原文地址:https://www.cnblogs.com/xiaoq/p/8336466.html
Copyright © 2011-2022 走看看