iteye_7219 2010-04-24 23:57
浏览 369
已采纳

Hibernate 中getSession().save() 保存不到数据库

为什么我的Hibernate 中getSession().save() 保存不到数据库
我的dao中怎么写的:
[code="java"]
/**
* 保存实体
*/
public void save(T o) {
getSession().persist(o);

}

[/code]
我在测试单元这样写的:
[code="java"]
@Test
public void testSave() {

        ApplicationContext cxt = new ClassPathXmlApplicationContext("/applicationContext.xml");
        buyerService = (BuyerService)cxt.getBean("buyerService");




    Buyer buyer = new Buyer("dengmingti","123456","test@sina.com");
    ContactInfo contactInfo = new ContactInfo();
    contactInfo.setAddress("百色市朝阳区左家庄");
    contactInfo.setMobile("13671323507");
    contactInfo.setPhone("010-64469090-9");
    contactInfo.setPostalcode("531500");
    buyer.setContactinfo(contactInfo);
    buyer.setGender("男");
    buyer.setRealname("刘德华");
    buyer.setRegTime(new Date());
    buyerService.save(buyer);

}[/code]

在dao中写 Transaction tran=getSession().beginTransaction();
tran.commit();也没有用

如果我的测试单元这样写怎可以保存到数据库中:
[code="java"]
protected static ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/applicationContext.xml");
protected static SessionFactory sessionFactory = (SessionFactory) applicationContext.getBean("sessionFactory");

@Test
public void testSave() {
    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();

    Buyer buyer = new Buyer("dengmingrun","123456","test@sina.com");
    ContactInfo contactInfo = new ContactInfo();
    contactInfo.setAddress("北海市朝阳区左家庄");
    contactInfo.setMobile("13671323507");
    contactInfo.setPhone("010-64469090-9");
    contactInfo.setPostalcode("533000");
    buyer.setContactinfo(contactInfo);
    buyer.setGender("男");
    buyer.setRealname("张学友");
    buyer.setRegTime(new Date());

    session.save(buyer);

    tx.commit();
    session.close();
}[/code]

我怎样才能使用buyerService.save(buyer);存到数据库中呀?

  • 写回答

4条回答 默认 最新

  • njutzyg 2010-04-26 10:09
    关注

    1、从你的文件来看,你应该是使用了spring;
    2、你说用getHibernateTemplate().save(o)可以成功,而getSession.save(o)却不行。有理由怀疑你是在spring的配置文件中配置了事务,而getHibernateTemplate()是Spring的方法,支持声明式事务管理,所以如果你配置了事务,它会自动调用事务并在操作完毕后自动关闭session;而单独的getSession()却与spring没有关系,它是由hibernate控制的,并不支持声明式事务管理,所以你必须调用session.flush()或transaction.commit()才可以成功保存。
      3、我怎样才能使用buyerService.save(buyer)存到数据库中呀?不妨把你的applicationContext.xml文件贴出来,看看你的service和dao关联起来了没(就是在service里有没有引用你配置的dao).现在你的dao里到底是使用哪种方式保存的,都没有说清楚

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 爬虫爬取网站的一些信息
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
  • ¥15 麒麟V10桌面版SP1如何配置bonding
  • ¥15 Marscode IDE 如何预览新建的 HTML 文件
  • ¥15 K8S部署二进制集群过程中calico一直报错