2014-12-01 5 views
0

Я использую Spring MVC и Postgres в качестве базы данныхоткатить данные из первой таблицы, если исключение

У меня есть требование, чтобы вставить Diff данных на две таблицу со второй таблицей имеет один столбцы как ForeignKey из первой таблицы

Я использую JDBC шаблон для соединения с базой данных

если некоторые исключения происходит при вставке в таблицу второй я хочу, чтобы откатить данные из первой таблицы также

для этого мне нужно использовать пружинные транзакции конц епть? пожалуйста, предложите

Я пытался осуществить операции таким образом

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:p="http://www.springframework.org/schema/p" 
xmlns:security="http://www.springframework.org/schema/security" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> 


<!-- Define all the service beans that will be created in ePramaan --> 
<context:annotation-config /> 
<tx:annotation-driven/> 
<!-- END OF DAO beans Definitions --> 

<bean class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource" /> 

<!-- Create DataSource Bean --> 
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:comp/env/jdbc/ePramaanDB" /> 
</bean> 
<bean id="jdbcSPProfileRepository" 
    class="in.cdac.epramaan.sp.dao.JdbcSPProfileRepository"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <bean id="transactionManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 
JdbcSPProfileRepository is a class it contains method to insert data to database 
I annotated class with @Transactional 
But when i run the server it is throwing exceptions

14: 44: 01,223 [локальный-стартстопный-1] ERROR osweb.context.ContextLoader - инициализация контекста не удалось орг .springframework.beans.factory.BeanCreationException: Ошибка создания bean-компонента с именем 'jdbcSPProfileRepository': инъекция автоподпрограммного зависимого ncies failed; Вложенное исключение - org.springframework.beans.factory.BeanCreationException: Не удалось создать поле autwire: in.cdac.epramaan.common.bd. MasterConfigBD in.cdac.epramaan.sp.dao.JdbcSPProfileRepository.masterConfigBD; Вложенное исключение - org.springframework.beans.factory.NoSuchBeanD efinitionException: не существует определяющего компонента типа [in.cdac.epramaan.common.bd.MasterConfigBD], найденного для зависимости: ожидается как минимум 1 компонент, который квалифицируется как кандидат на автоукрепление для этого зависимость. Зависимость от аннотаций: {@ org.springframework.beans.factory.annotation.Autowired (требуется = т РУЭ)}

@Component 
@Transactional 
public class JdbcSPProfileRepository implements SPProfileRepository { 

private static final Logger logger = LoggerFactory 
     .getLogger(JdbcSPProfileRepository.class); 
@Autowired 
private JdbcTemplate jdbcTemplate; 

/** The master config bd. */ 
@Autowired 
MasterConfigBD masterConfigBD; 

@Autowired 
public JdbcSPProfileRepository(DataSource dataSource) { 

} 

@Override 
@Transactional 
public SPRegistrationResponse saveSPRegistrationDetails(
     final SPRegistration spreg) { 
    SPRegistrationResponse spRegResponse = new SPRegistrationResponse(); 
    Response response = null; 
    logger.debug("In saveSPRegistrationDetails : "); 
    try {/////}catch(){} 
    } 
    } 
can anybody please suggest the solution
+0

Попробуйте реализовать его с тем, что у вас есть в голове, и если что-то придет, мы будем рады помочь. –

+0

Привет, JavaBond Я пробовал с выше, но получаю исключения на сервере – user3365200

ответ

0

У вас есть несколько вариантов. Один из них, как вы полагаете, использует Spring-транзакции. http://simplespringtutorial.com/springDeclarativeTransactions.html Или вы можете реализовать свой собственный метод ACID, где совместное использование соединений между транзакциями делает его атомарным. Посмотрите этот пример. http://www.tutorialspoint.com/jdbc/commit-rollback.htm

Ключ только фиксирует на вас соединение («con»), когда вы хотите завершить транзакцию. Затем, если что-то пойдет не так, прежде чем закончить все ваши микро транзакции, поскольку вы еще не зафиксировали, в вашей базе данных ничего не останется.

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