hyacinth小堇
2016-05-08 22:50
package service.impl;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import db.MyHibernateSessionFactory;
import entity.Users;
import service.UsersDAO;
public class UsersDAOImpl implements UsersDAO {
@Override
public boolean usersLogin(Users u) {
// 事物对象
Transaction tx = null;
String hql = "";
try {
Session session = MyHibernateSessionFactory.getSessionFactory().getCurrentSession();
tx = session.beginTransaction();
hql = "from Users where username=? and password=? ";
Query query = session.createQuery(hql);
query.setParameter(0, u.getUsername());
query.setParameter(1, u.getPassword());
List<?> list = query.list();
tx.commit();//提交事物
if (list.size()>0) {
return true;
} else {
return false;
}
} catch (Exception ex) {
ex.printStackTrace();
return false;
} finally {
if (tx != null) {
tx = null;
}
}
}
}package service.impl;
import org.junit.Test;
import entity.Users;
import junit.framework.Assert;
import service.UsersDAO;
public class TestUsersDAOImpl {
@Test
public void testUsersLogin() {
Users u = new Users(1, "zhangsan", "123456");
UsersDAO udao = new UsersDAOImpl();
// udao.usersLogin(u);
Assert.assertEquals(true, udao.usersLogin(u));
//将expected改为false则测试通过
}
}DeBug显示返回的list的 size 0
错的很明显啊。
29行:List<?> list = query.list();
泛型是【?】,那list除了null以外,任何参数都不接收。
我也是这个问题 不过已经解决了 楼主还没解决的话可以问我
是数据库没加数据吧
有人解决了吗
有一点需要大家注意的是尽管hibernate查询语句能识别数据库语句生成脚本语言,两者很相像但是还是有所有区别hibernate执行查询语句的时候查询的是一个对象,也就是说数据库里面的表名hibernate并不是hibernate中的对象,而实体类的类名才是hibernate查询的对象
先执行 <property name="hbm2ddl.auto">create</property>创建完表后,再把create改成update就好了。避免了启动的时候又重新创表,那之前的表里面的数据就会被销毁。销毁之后,user对象的值就会查询不到,然后会抛出这个junit.framework.AssertionFailedError: expected:<true> but was:<false>异常。大家是不是运行代码的时候抛出这个异常?当抛出这个异常的时候,大家打开数据库里面的表,可以看看表里面原先存放的的数据是不是被销毁了!只需要执行一次create就行了,然后把create改成update就OK祝各位猿友。
有人解决了这个问题吗?
现在我也是这个问题,可是我本来写的就是update,所以请问一下,这个问题是怎么解决的?
我按照你这样弄了还是不对啊 ?
不是这样的;原因已找到
<!--
<property name="hbm2ddl.auto">create</property>
-->
<property name="hbm2ddl.auto">update</property> //配置错了;应该是update
create:表示启动的时候先drop,再create
create-drop: 也表示创建,只不过再系统关闭前执行一下drop
update: 这个操作启动的时候会去检查schema是否一致,如果不一致会做scheme更新
validate: 启动时验证现有schema与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新
在测试类这里加个注解吧,
@SuppressWarnings("deprecation")
public class TestUsersDAOImpl {
开始我按提示加了注解,好像就好了
使用Struts2+Hibernate开发学生信息管理功能
80695 学习 · 797 问题
相似问题