我有一个Login类:
if((!(name.equals(null) || name.equals("")) && !(password.equals(null) || password.equals(""))))
{
try{
loggedUser = checkLogin(name, hexPass.toString());
if(!loggedUser.isEmpty())
{
userdbId = loggedUser.get(0);
userdbName = loggedUser.get(1);
userdbPsw = loggedUser.get(2);
userdbType = loggedUser.get(3);
...
用户DAO:
public List<String> checkLogin(String uname, String password) {
Session session = null;
List<String> lst = new ArrayList<String>();
try {
session = getSession();
String sql = "select * from user where uname='" + uname + "' and password='" + password + "'";
Query query = session.createSQLQuery(sql)
.addScalar("Id", StringType.INSTANCE)
.addScalar("uname", StringType.INSTANCE)
.addScalar("password", StringType.INSTANCE)
.addScalar("utype", StringType.INSTANCE);
lst = query.list();
}
catch (Exception e){
e.printStackTrace();
}
return lst;
}
userdbId = loggedUser.get(0);生成错误:500
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.lang.String
com.se.pl.actions.LoginAction.execute(LoginAction.java:95)
我不明白为什么会发生这种情况,因为4个字符串的列表将被放入4个变量中。
答案 0 :(得分:0)
错误意味着你有一个Object而你正在对String进行隐式转换,这就是错误。
userdbId = loggedUser.get(0);
您可以通过添加toString()方法来解决这个问题,例如:
userdbId = loggedUser.get(0).toString();
当然,您将获得该对象的字符串表示形式。
请注意,如果您有自己的对象,则会获得以下表示:
getClass().getName() + '@' + Integer.toHexString(hashCode())
如果你有这个,你需要覆盖你班级的toString()
方法
答案 1 :(得分:0)
您应该使用TypedQuery<T>
而不是查询并创建用户实体类型的对象(如果您已定义它 - 您肯定应该有一个) - 它应该看起来像这样(不要使用此代码文学上!我主要使用OpenJPA )
TypedQuery<UserEntity> query= session.createQuery("SELECT u FROM UserEntity u WHERE name=:name AND password=:password");
query.addParam("name",name);
query.addParam("password",password);
答案 2 :(得分:0)
这可能应该有所帮助:
Query query = session.createSQLQuery(sql)
.addScalar("Id", StringType.INSTANCE)
.addScalar("uname", StringType.INSTANCE)
.addScalar("password", StringType.INSTANCE)
.addScalar("utype", StringType.INSTANCE)
.setResultTransformer(org.hibernate.Criteria.ALIAS_TO_ENTITY_MAP);
Map row = (Map) query.uniqueResult();
lst.add((String) row.get("Id"));
lst.add((String) row.get("uname"));
lst.add((String) row.get("password"));
lst.add((String) row.get("utype"));