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开发学生信息管理功能
80700 学习 · 754 问题
相似问题