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

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条)

报告相同问题?

悬赏问题

  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择