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 {
开始我按提示加了注解,好像就好了