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);
  • 相关阅读:
    Pthread使用总结
    OpenCV同态滤波
    重复文件重新创建
    Consider using the `--user` option or check the permissions.
    错误:pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
    python tkinter模版
    tkinter页面卡死
    视频下载
    tkinter学习系列(三)之Label控件
    Entry小部件:
  • 原文地址:https://www.cnblogs.com/xiaoq/p/8336466.html
Copyright © 2011-2022 走看看