Java 无法使用Hibernate持久化实体
我有一个包含Java 无法使用Hibernate持久化实体,java,mysql,hibernate,Java,Mysql,Hibernate,我有一个包含id和两个外键的表。我需要添加新记录。在persist方法之前,一切都按预期进行-productPart是有效的实体。执行persist后,MySQL表中不会出现新记录 DAO @Repository public class ProductPartDao{ @Override @Transactional public void addProductPart (ProductPart productPart) { sessio
id
和两个外键的表。我需要添加新记录。在persist
方法之前,一切都按预期进行-productPart
是有效的实体。执行persist
后,MySQL表中不会出现新记录
DAO
@Repository
public class ProductPartDao{
@Override
@Transactional
public void addProductPart (ProductPart productPart) {
sessionFactory.openSession().persist(productPart); // doesn't work
}
服务
@Service
public class ProductPartService{
@Autowired
ProductPartDao productPartDao;
@Override
@Transactional
public void addProductPart(ProductPart productPart) {
productPartDao.addProductPart(productPart);
}
我无法使用sessionFactory.getCurrentSession(),因为它引发错误:HibernateException:无法获取当前线程的事务同步会话
原因是什么?如何解决
更新
在applicationContext中:
...
<tx:annotation-driven/>
...
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory">
</bean>
...
异常前的会话对象:
当使用加载的ConfigurableApplicationContext
从main调用对象时,它可以持久化该对象。带控制器的SpringWeb应用程序失败
已解决
通过替换
sessionFactory.openstatesession().insert(…)
解决。我不知道它是如何工作的,为什么工作。如能解释,将不胜感激 您有配置事务管理器吗?如果是的话,那就帮我们贴吧。此链接表示您已使用@Transactional annotation修复了HibernateeException,因此您对该帖子也有问题?是的,因为我被迫切换到其他方法访问会话
我有未解决的问题。它有肮脏的快速修复只是为了让它工作。
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:134)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:988)
at ee.t.mysql.model.ProductPartDAOImpl.addProductPart(ProductPartDAOImpl.java:19)