как исправить, не выполняется транзакция в весенней партии - PullRequest
0 голосов
/ 28 декабря 2018

когда я пытаюсь сохранить некоторые данные, которые я восстановил из моего csv-файла в моей базе данных, используя весенний пакет моего процессора заданий, эта ошибка появляется в консоли, для моего дао я использую hibernate

Я уже пытался2 метода но проблема такая же!

первый:

    Session session = factory.getCurrentSession();
    session.saveOrUpdate(p);

второй:

    Session session = factory.openSession();
    session.beginTransaction();
    session.save(p);
    session.getTransaction().commit();
    session.close();

источник данных в моем весеннем конфиге xml: все мои весенние конфиги xml здесь https://pastebin.com/RZPr1GKL

<bean name="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/yassir" />
        <property name="username" value="root" />
        <property name="password" value="" />
    </bean>


    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value>tp.entities.Personne</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>


    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <tx:annotation-driven />

ошибка: javax.persistence.TransactionRequiredException: транзакция не выполняется в org.hibernate.internal.SessionImpl.checkTransactionNeeded (SessionImpl.java:3450) в org.hibernate.internal.SessionImpl.doFlush (SessionImpl.j)1418) в org.hibernate.internal.SessionImpl.flush (SessionImpl.java:1414) ...

1 Ответ

0 голосов
/ 29 декабря 2018

Вы настроили Spring Batch для использования DataSourceTransactionManager для управления транзакциями.Этот менеджер транзакций ничего не знает о вашем контексте Hibernate.Вам нужно использовать HibernateTransactionManager, чтобы Hibernate Session в вашем модуле записи участвовал в управляемых транзакциях Spring Batch.

Я бы также рекомендовал использовать HibernateItemWriter вместо создания собственного модуля записи (PersonneWriter) и создание сеанса вручную и управление транзакциями.

Аналогичный вопрос / ответ можно найти здесь: Spring Batch JpaItemWriter против HibernateItemWriter и почему HibernateTransactionManager необходим, когда используется HibernateItemWriter

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...