以下是我导入的支持hibernate的炸包,是从www.hibernate.org官网下的:
配置好文件之后,我进行了最基本的session对数据库的操作,insert和update方法都可以正常地执行。然而当我测试delete方法的时候,控制台开始报“You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where id=2' at line 1”的错误,意思是mysql提示说我的sql语句有问题对吧,然后我去查看了输出在控制台的hibernate执行的语句,我惊呆了,我把我写的代码和控制台输出贴一下:
/**
* 测试session会话的update,delete,insert方法
*/
@Test
public void testSession(){
Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
//获得全新的session会话
Session session = sessionFactory.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
User user = (User)session.load(User.class,2);
session.delete(user);
System.out.println(user);
//提交事务
transaction.commit();
//手动关闭session会话
session.close();
sessionFactory.close();
return;
}
控制台是这么写的:
我开始也没有想到Hibernate输出的sql语句会有问题,在网上找了半天,然后我看到这个Hibernate输出的sql之后我惊呆了。网上我没有看到有人发过类似的问题,我也不知道为什么会这样,session其他的方法都可以正常执行应该说明hibernate的配置没有什么问题吧。不知道有大佬知道这是怎么回事吗?
另一个问题其实也类似,就是调用hibernate提供的方法正常执行却没有实现约定的功能,就很崩溃。我用Query进行limit的查询,这应该是一个很基本的操作,代码如下:
/**
* 测试Query查询
*/
@Test
public void testQuery(){
//获取用户核心配置对象
Configuration configuration = new Configuration();
//加载核心配置文件,默认加载hibernate.cfg.xml
configuration.configure();
//构建SessionFactory
SessionFactory sessionFactory = configuration.buildSessionFactory();
//生产Session会话对象
Session session = sessionFactory.openSession();
//获取Query查询对象,Hibernate通过类来映射表
Query query = session.createQuery("from User order by id desc ");
//分页查询limit ?,?
query.setFirstResult(0);
query.setMaxResults(3);//从0数据开始一次3个
//返回多行数据
/**
* list()多行
* uniqueResult()单行
*/
List list = query.list();
for(Object o:list){
System.out.println(o);
}
return;
}
}
但是无论我怎么修改serFirstResult()和setMaxResults()的参数,它始终不能正常的执行,要不就是把表内数据全部放进List返回要不就是我也看不懂什么逻辑地返回了几条记录。网上有人说Query查询的结果是无序的所以应该用order by限制一下,我加了还是没有用。
希望有大佬指点迷津,告诉我一下这个问题应该怎么解决。