我用hibernate做的时候,为什么能在数据库中创建表,但是却没有记录。很怪!!import gigix.forum.bean.Post;
import gigix.forum.bean.User;
import net.sf.hibernate.Query;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.tool.hbm2ddl.SchemaExport;public class UserHibernate {
public static void main(String[] args) throws Exception{
Configuration cfg = new Configuration();                cfg = cfg.addClass(User.class);
                cfg = cfg.addClass(Post.class);
SessionFactory sessions = cfg.buildSessionFactory();
new SchemaExport(cfg).create(true, true); Session session = sessions.openSession();
User user = new User("Gigix");
user.setMail("[email protected]"); Post post = new Post();
post.setTitle("Test");
post.setContent("Only for Test"); user.getPosts().add(post);//getPosts()方法返回posts set session.save(user);
session.flush();
session.close();
 
session = sessions.openSession();
Query q = session.createQuery("from Post as post where post.title = 'test'");
post = (Post) q.list().get(0);
System.out.println(post.getOwner().getMail());
                  System.out.println(post.getOwner().getId()); post.getOwner().setMail("[email protected]");
session.update(post);
System.out.println(post.getOwner().getMail()); session.flush();
session.close(); }
}User和Post类的代码就省略了。
编译执行 java UserHibernate   结果如下:
==================================
............省略了一些正常的系统输出
[email protected]
Gigix
[email protected]说明一切正常,同时我查看数据库。
发现建立了[users]和[post]表,表结构也和我要求的一样,但是二表里面却没有记录。
********为什么呢???????????************

解决方案 »

  1.   

    把修改数据库的操作放在一个事务里,save动作之后提交事务,就可以保证把内容写入数据库。最简单的做法是在session.flush()之后加上一句:
    session.connection().commit(); gigix的示例代码也算是极其不负责了,事务、会话……hibernate的日常工作他一律不管,都丢给读者来处理,辛苦了楼主这样的读者。还是多查一下hibernate的文档吧。
      

  2.   

    to Schlemiel(维特根斯坦的扇子)
    多谢你的指点,但是,同样的程序,我用MySQL做数据库就没有上述的问题!这就比较令我迷惑了。