如何在Hibernate查询中将Integer参数设置为null? [英] How to set Integer parameter as null in Hibernate query?

查看:910
本文介绍了如何在Hibernate查询中将Integer参数设置为null?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  @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)
私人日期passwordExpiration;

public String getUsername(){
return username;
}
...

我正在谈论 master_id 。这是我的DAO方法:
$ b $ pre $ 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();

}

Log说:


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


并将指针放在这一行:

  .setInteger(master_id,master_id); 

master_id 有时必须为空。那么如何设置null?

解决方案

如果您检查Query类的setInteger()方法的文档,

 查询setInteger(String name,int val)

它将一个名称和一个原始类型int 作为参数。当您传递一个包装类型在自动装箱期间,整数的值为null,发生空指针异常。



例如:

 整数x = null; 
int y = x; //给出一个空指针异常。

您可以使用

 查询setParameter(String name,
Object val,
Type type);

设定空值的方法。

另见:




I've got an entity:

    @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;
        }
        ...

I'm talking about master_id. And this is my DAO method:

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();

    }

Log says:

Request processing failed; nested exception is java.lang.NullPointerException

and puts pointer at this line:

.setInteger("master_id", master_id);

master_id must be null sometimes. So how can I set null?

解决方案

If you check the documentation of the Query class, setInteger() method,

Query setInteger(String name,int val)

It takes a name and a primitive type int, as parameters.

When you pass a wrapper type Integer, whose value is null, during autoboxing, a null pointer Exception occurs.

For example:

Integer x = null;
int y = x;  // gives a nullpointer exception.

You could use

Query setParameter(String name,
                   Object val,
                   Type type);

method to set null values.

See Also:

Hibernate: How to set NULL query-parameter value with HQL?

这篇关于如何在Hibernate查询中将Integer参数设置为null?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆