gpt4 book ai didi

java - @Transactional 不打开 Hibernate 事务

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:36 24 4
gpt4 key购买 nike

我在 beans.xml 中声明了 Spring Beans:

<context:annotation-config />   
<context:component-scan base-package="com.pack"/>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
<property name="dataSource" ref="dataSource"></property>
</bean>

dataSource 和 sessionFactory bean:

@Bean(name = "dataSource")
public DriverManagerDataSource dataSource() {
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setUsername(userName);
ds.setPassword(password);
ds.setDriverClassName(driverName);
ds.setUrl(url);
return ds;
}

@Bean(name = "sessionFactory")
public LocalSessionFactoryBean localSessionFactoryBean() {
LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
factory.setDataSource(dataSourceConfiguration.dataSource());

Properties props = new Properties();
props.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
props.put("hibernate.hbm2ddl.auto", "update");
props.put("hibernate.current_session_context_class", "thread");
factory.setHibernateProperties(props);
factory.setMappingResources("com/pack/Item.hbm.xml");

return factory;
}

如果我分别使用 sessionFactory 和 dataSource bean,它们运行良好。 A 也有 DAO 类:

@Repository(value = "itemDaoHibernateImpl")
public class ItemDaoHibernateImpl implements ItemDao {

@Resource(name = "sessionFactory")
private SessionFactory factory;

public void setFactory(SessionFactory factory) {
this.factory = factory;
}

public Session session() {
return factory.getCurrentSession();
}

@Override
public void create(Item item) {
session().save(item);
}

我不打开 session ,因为我想强制 Spring 这样做。我有服务类方法:

@Override
@Transactional
public void create(Item item) {
dao.create(item);
}

当我调用它时,出现异常:

org.hibernate.HibernateException:在没有 Activity 事务的情况下保存无效

我已经做到了 this tutorial告诉。我的错误在哪里?

最佳答案

尝试从您的 sessionFactory 配置中删除 props.put("hibernate.current_session_context_class", "thread")。当您使用 Spring 管理的事务时,您不需要它。让我知道这是否有效。

关于java - @Transactional 不打开 Hibernate 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28411437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com