保存我的对象的问题

时间:2013-12-26 11:37:44

标签: spring hibernate

我在保存实体时遇到问题,我使用spring 4和hibernate 4。

   @Repository
   public class AuthDao {

   @Autowired 
   private SessionFactory sessionFactory;

   @Transactional
   public void enregistrer(Auth auth) {
     Session session = sessionFactory.openSession();
    session.saveOrUpdate(auth);
  }

我的数据库中没有添加任何条目。 但如果我想读它就好了。

session.get(Auth.class, 2)

我的第二个问题是我想理解为什么当我把:

Session session = sessionFactory.getCurrentSession();

它不起作用,我得到了:

No Session found for current thread

我的其他档案:

@Controller
public class testController {


@Autowired 
private AuthDao authDao;

@RequestMapping(value = "/cc")
public String printWelcome() {

    authDao.enregistrer(new Auth(7, "test", "test"));
    return "hello";

}

}

    <context:component-scan base-package="dao"/>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    ...
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    ...
</bean>



<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

2 个答案:

答案 0 :(得分:0)

第一个问题:  HibernateSession是一级缓存,数据不会保存(在数据库中),直到会话关闭(在提交事务中),但某些查询可以访问数据。 This link explain it very well

第二个问题:  您要求的是当前的HibernateSession,但由于尚未创建或打​​开,因此无法访问它。

在我个人看来,这不是集成Spring和Hibernate的最佳方式,我认为你应该使用HiberanteTemplate,也许这个tutorial可以帮助你。

答案 1 :(得分:0)

现在我的工作忘记了

<tx:annotation-driven transaction-manager="transactionManager"/>

我把

sessionFactory.getCurrentSession();

它似乎在tx:annotation-driven sessionFactory.openSession()无法打开正确的会话后工作。

但有人能解释我为什么吗?