【发布时间】:2016-05-09 14:15:00
【问题描述】:
在下面的代码中,第 13 行导致了 NullPointerException,而对于我来说,我不知道为什么:
1 byte[] hash;
2 byte[] salt;
3
4 JsonObject jsonObject = new JsonParser().parse(request).getAsJsonObject();
5 String username = jsonObject.get("mUsername").getAsString();
6 char[] password = jsonObject.get("mPassword").getAsString().toCharArray();
7
8 String HQLGetUser = "SELECT User FROM User WHERE mUsername = :username";
9
10 Session session = HibernateUtilities.openSession();
11 session.beginTransaction();
12
13 User user = session.createQuery(HQLGetUser)
14 .setString("username", username)
15 .list();
16
17 session.getTransaction().commit();
18 session.close();
19
20 hash = user.get(0).getHash();
21 salt = user.get(0).getSalt();
数据库肯定有我正在搜索的用户名的记录。我尝试创建一个查询并使用相同的会话对象调用get(User.class, userId),使用主键而不是用户名字符串来搜索记录,它返回了一个User 对象,因此肯定正在配置SessionFactory。我还使用以下方法查询了 phpmyadmin 中的数据库:
select * from user where username = :username
我也得到了我想要的唱片。任何想法为什么我会得到 NullPointerException?
更新:这是我的用户类的代码引用:
@Entity
@Table(name="user")
public class User implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private Long mId;
@Column(name="username")
private String mUsername;
@Column(name="hash")
private byte[] mHash;
@Column(name="salt")
private byte[] mSalt;
}
【问题讨论】:
-
尝试将您的语句拆分为单独的调用,并确定
setString或uniqueResult调用中的哪一个在 NPE 上。另外,您是否真的在此处看到的代码之外设置了username? -
你在哪里设置
username? -
@Riaz 我添加了我设置用户名的代码
-
@radimpe 我试过了,NPE 是在创建查询行引起的
-
调试器是你的朋友。
标签: java hibernate jsp nullpointerexception