我有一个实体:
@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;
}
...
Run Code Online (Sandbox Code Playgroud)
我在说master_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();
}
Run Code Online (Sandbox Code Playgroud)
日志说:
请求处理失败; 嵌套异常是java.lang.NullPointerException
并将指针放在这一行:
.setInteger("master_id", master_id);
Run Code Online (Sandbox Code Playgroud)
master_id有时必须为空.那么如何设置null呢?
Bat*_*eam 22
如果查看Query类的文档,请使用setInteger()方法,
Query setInteger(String name,int val)
Run Code Online (Sandbox Code Playgroud)
它采用名称和基本类型int作为参数.
当您在自动装箱期间传递包含类型为Integer(其值为null)时,会发生空指针异常.
例如:
Integer x = null;
int y = x; // gives a nullpointer exception.
Run Code Online (Sandbox Code Playgroud)
你可以用
Query setParameter(String name,
Object val,
Type type);
Run Code Online (Sandbox Code Playgroud)
设置空值的方法.
也可以看看:
小智 8
对于null对象,请将其指定为:
query.setParameter("name", object, StandardBasicTypes.INTEGER);
Run Code Online (Sandbox Code Playgroud)
StandardBasicTypes.INTEGER替换Hibernate.INTEGER(等)
| 归档时间: |
|
| 查看次数: |
27764 次 |
| 最近记录: |