java ee/ssh。hibernate连接sqlserver2008的问题,谢谢!
eclipse中测试,通过hibernate连接数据库。然后存入和读出几个对象都很正常。但是在数据库的管理工具(sqlserver2008)那里技术刷新和重新启动软件也没...
eclipse中测试,通过hibernate连接数据库。然后存入和读出几个对象都很正常。
但是在数据库的管理工具(sqlserver2008)那里技术刷新和重新启动软件也没有看到插入的元组。
问题:
1、那么存储的数据存到了哪里呢?如何在sqlserver2008中看到?
2、sqlserver有没有类似的命令行工具,比如在cmd中敲上“select * from student”就能在cmd中显示student表的数据?看别人用的mysql倒是有。
问题1的存取代码、配置、问题表现,详情如图: 展开
但是在数据库的管理工具(sqlserver2008)那里技术刷新和重新启动软件也没有看到插入的元组。
问题:
1、那么存储的数据存到了哪里呢?如何在sqlserver2008中看到?
2、sqlserver有没有类似的命令行工具,比如在cmd中敲上“select * from student”就能在cmd中显示student表的数据?看别人用的mysql倒是有。
问题1的存取代码、配置、问题表现,详情如图: 展开
3个回答
展开全部
flush()和缓存相关。执行时会清除session缓存并向数据库发送SQL语句并执行,但此时如果数据库当前存在一个事务,数据库会先将这些SQL语句缓存起来,那么此时在数据库中是无法看到SQL语句执行结果的。除非执行commit提交了事务。只要没有执行commit()方法,就能通过rollback()方法进行回滚。
1、session在什么情况下清理缓存:
* 默认情况下,当应用程序提交事务,如:Transaction.commit;
* 当我们显示调用flush的时候
* 在执行某些查询的时候,如:iterate
2、session.flush()主要完成两件事情:
* 清理缓存
* 执行sql
3、flush执行的顺序:hibernate按照save,update,delete顺序提交相关操作
commit()和事务相关。执行时会先隐式调用flush()方法,再提交事务。执行之后无法rollback()进行回滚。
public void testSave1() {
Session session = null;
Transaction tx = null;
try {
session = HibernateUtils.getSession();
tx = session.beginTransaction();
User1 user = new User1();
user.setName("李四");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
// 因为user的主键生成策略采用的是uuid,所以调用完成save后,只是将user纳入到了session的管理
// 不会发出insert语句,但是id已经生成,session中existsInDatebase状态为false
session.save(user);
// 调用flush,hibernate会清理缓存,执行sql
// 如果数据库的隔离级别设置为未提交读,那么我们可以看到flush过的数据
// 并且session中existsInDatebase状态为true
session.flush();
// 提交事务
// 默认情况下commit操作会先执行flush清理缓存,所以不用显示的调用flush
// commit后数据是无法回滚的
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
} finally {
HibernateUtils.closeSession(session);
}
}
public void testSave2() {
Session session = null;
Transaction tx = null;
try {
session = HibernateUtils.getSession();
tx = session.beginTransaction();
User2 user = new User2();
user.setName("张三1");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
// 因为user的主键生成策略为native,所以调用session.save后,将执行insert语句,返回有数据库生成的id
// 纳入了session的管理,修改了session中existsInDatebase状态为true
// 如果数据库的隔离级别设置为未提交读,那么我们可以看到save过的数据
session.save(user);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
} finally {
HibernateUtils.closeSession(session);
}
}
2014-02-10
展开全部
原因:从您的描述来看,肯定是插入到数据库了,而且也是一张student数据表。但是与sqlserver中所看到的那张表并不是一张表。原因就是没有指定目标数据库(hibernate.cfg.xml中可以看出)
解决:修改hibernate.cfg.xml,加上databasename即可。
<property name="connection.url">
jdbc:sqlserver://localhost:1433;databasename=你的数据库的名字
</property>
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不好判断原因,猜测你写入的数据库和你用工具查看的数据库不是同一个。
如不是这个错误,贴一下hbm文件,如果是注解方式的,贴po文件
如不是这个错误,贴一下hbm文件,如果是注解方式的,贴po文件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询