我在保存实体时遇到问题,我使用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>
答案 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()无法打开正确的会话后工作。
但有人能解释我为什么吗?