Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Hibernate查询中将整型参数设置为null?_Java_Hibernate - Fatal编程技术网

Java 如何在Hibernate查询中将整型参数设置为null?

Java 如何在Hibernate查询中将整型参数设置为null?,java,hibernate,Java,Hibernate,我有一个实体: @Entity @Table(name = "smsc.security_users") public class User { @Id @Column(name = "id") private int id; @Column(name = "username") private String username; @Column(name = "passw

我有一个实体:

    @Entity
    @Table(name = "smsc.security_users")
    public class User {

        @Id
        @Column(name = "id")
        private int id;

        @Column(name = "username")
        private String username;

        @Column(name = "password")
        private String password;

        @Column(name = "enabled")
        private int enabled;

        @Column(name = "master_id", nullable = true)
        private Integer master_id;

        @Temporal(TemporalType.TIMESTAMP)
        @Column(name = "passwordExpiration")
        private Date passwordExpiration;

        public String getUsername() {
            return username;
        }
        ...
我说的是
master\u id
。这是我的DAO方法:

public void add(String userName, String password, Integer master_id) {
        Session session = null;
        session = this.sessionFactory.getCurrentSession();
        Query query = session
                .createSQLQuery(
                        "INSERT INTO smsc.security_users(id,username,password,enabled,passwordExpiration,master_id) VALUES(smsc.SeqDictID.nextval+1,:userName,:password,1,:passwordExpiration,:master_id)")
                .setString("userName", userName)
                .setString("password", Sha1.getHash(password))
                .setTimestamp("passwordExpiration", DateUtil.getTomorrow())
                .setInteger("master_id", master_id);
        int updated = query.executeUpdate();

    }
日志说:

请求处理失败;嵌套异常是 java.lang.NullPointerException

并将指针放在这一行:

.setInteger("master_id", master_id);

master\u id
有时必须为空。那么如何设置null呢?

如果您查看查询类setInteger()方法的文档

它采用名称和基元类型int作为参数

自动装箱过程中传递值为null的包装器类型整数时,会发生null指针异常

例如:

Integer x = null;
int y = x;  // gives a nullpointer exception.
你可以用

Query setParameter(String name,
                   Object val,
                   Type type);
方法设置空值

另请参见:


对于空对象,请将其指定为:

query.setParameter("name", object, StandardBasicTypes.INTEGER);

StandardBasicTypes.INTEGER
已替换
Hibernate.INTEGER
(etc)

尝试:.setParameter(“master\u id”,master\u id)@DmitryTsechoev,
ora-00932不一致的数据类型预期的数字为二进制的
解决方法是创建两个单独的方法,并在SQL查询字符串中指定null,这可能会有所帮助(看答案):@Funtik,好的。但我想我们可以把一个java引用作为可能为null的参数。我知道null的部分。我的整数可能为null。这就是为什么我选择wrapper作为它的类型。你试过setParameter()了吗使用这三个参数?根据文档,它肯定会起作用。它应该是什么类型?你能试试IntegerType.INSTANCE吗?我想Hibernate.INTEGER已经被弃用了。我已经用一个链接更新了我的答案,但这只是一个解决方法。
query.setParameter("name", object, StandardBasicTypes.INTEGER);