2015-02-04 3 views
1
@Repository 
public class Init { 

    public static void main(String[] args) { 

     Init init = new Init(); 
     init.addUser(init.getSessionFactory()); 

    } 

    private SessionFactory getSessionFactory() { 
     ApplicationContext context = new ClassPathXmlApplicationContext(
      new String[] { "Spring_Hibernate.xml" }); 

     SessionFactory sf = (SessionFactory) context.getBean("sessionFactory"); 

     return sf; 
    } 

    @Transactional 
    private void addUser(SessionFactory sf) { 
     Session session = sf.getCurrentSession(); 

     User user = new User(); 
     user.setName("123"); 
     session.save(user); 
     session.close(); 
     sf.close(); 
    } 
} 

XML:Спящий 4 Пружина 4 Не удалось получить транзакции синхронизированных сеанс для текущего потока

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

    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan" value="com.warmmer.bean" /> 
    <property name="hibernateProperties"> 
     <!-- <value> hibernate.dialect=org.hibernate.dialect.HSQLDialect </value> --> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
      <prop key="hibernate.format_sql">true</prop> 

      <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop> 
     </props> 
    </property> 
</bean> 


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

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

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

ERR: ИНФОРМАЦИЯ: Использование DataSource [[email protected]] из Hibernate SessionFactory для HibernateTransactionManager Исключения в потоке «основной» org.hibernate.HibernateException: не удалось получить транзакции синхронизированных сессий для текущего потока

Если: hibernate.current_session_cont ext_class установить «нить»

тогда: сохранение не является действительным без активной транзакции

что я должен делать, пожалуйста?

ответ

1

Вы не создаете свой «Init» объект в контексте весеннего, так весна никогда не получить шанс, чтобы обернуть прокси вокруг метода с аннотацией, которая будет управлять сделку

Попробуйте изменить свой класс. ..

package my.pkg; 
// Imports etc 

@Repository 
public class Init { 

    @Autowired 
    private SessionFactory sessionFactory; 

    public static void main(String[] args) { 
     ApplicationContext context = new ClassPathXmlApplicationContext(
      new String[] { "Spring_Hibernate.xml" }); 
     Init init = context.getBean(Init.class); 
     init.addUser(); 
    } 

    @Transactional 
    private void addUser() { 
     Session session = sessionFactory.getCurrentSession(); 

     User user = new User(); 
     user.setName("123"); 
     session.save(user); 
     // session.close(); DON'T NEED THESE! 
     // sf.close(); 
    } 
} 

Теперь вы, возможно, потребуется добавить следующее к фасолью файл, так что он находит ваше хранилище ...

<context:component-scan base-package="my.pkg"/> 
+0

не помню, если @Transactional будет чюо rk для частных методов, если это не так, попробуйте сделать этот метод общедоступным ... – BretC

+0

Исключение из потока "main" org.springframework.orm.hibernate4.HibernateSystemException: Неизвестный запрос службы [org.hibernate.stat.spi.StatisticsImplementor] ; Вложенное исключение - org.hibernate.service.UnknownServiceException: Неизвестная запрашиваемая услуга [org.hibernate.stat.spi.StatisticsImplementor] \t at org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException (SessionFactoryUtils.java:218) – wmmj23

+0

Попробуйте избавиться of session.close() и sf.close() - материал @Transactional имеет дело с этим для вас – BretC

Смежные вопросы

 Смежные вопросы