0

我的 Spring 项目中有一个问题,在创建我的 hibernateSession 和 TransactionManager 之后,我初始化了一个扩展PropertyPlaceholderConfigurer的 bean, 我不知道为什么,但在那一刻,我的 hibermnate 会话被毁,无法用于我的 DAO 的其余部分。抛出的错误就是这个。

Caused by: org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

有什么建议么?

我正在尝试从数据库中提取一些数据以创建一个属性类并设置为我创建的扩展PropertyPlaceholderConfigurer的类

这是课

 public class PropertiesSourceImpl extends PropertyPlaceholderConfigurer{

public ConfigurationSource configurationSource;

public Properties properties;

public void init() {
    for (ConfigurationProperty prop : configurationSource.getEnabledConfigurationPropertiesByType(ConfigurationProperty.PropertyType.MAIL)) {
        System.out.println(prop);
       // properties.setProperty(prop.getPropertyKey(), prop.getPropertyValue());
    }
}

public Properties getProperties() {
    return properties;
}

@Required
public void setConfigurationSource(final ConfigurationSource configurationSource) {
    this.configurationSource = configurationSource;
}

}

这里是我的 bean 定义

<bean id="propertiesSource" class="nl.greenvalley.digipolis.config.PropertiesSourceImpl" init-method="init">
    <property name="configurationSource" ref="configurationSource"/>
</bean>
4

1 回答 1

0

最后我找到了解决方案。我只是在创建休眠会话和事务之前创建一个新的会话和事务,而不是使用休眠。

      SessionFactory sessionFactory;

public void init() {
    Session session = sessionFactory.openSession();
    Transaction tx = null;
    try {
        Properties properties = new Properties();
        tx = session.beginTransaction();
        List<ConfigurationProperty> dbProperties = session.createCriteria(ConfigurationProperty.class).list();
        for (ConfigurationProperty property : dbProperties) {
            properties.setProperty(property.getPropertyKey(), property.getPropertyValue());
        }
        setProperties(properties);
        tx.commit();
    } finally {
        session.close();
    }
}
于 2013-11-06T16:04:41.127 回答