Série Spring: Transaction via Annotation Spring 3 + Hibernate
Veremos como usar Annotations nas nossas transaction. Para isso, teremos como exemplo uma aplicação bem simples para irmos direto ao ponto.
Olá, pessoal.
No artigo de hoje, veremos como usar Annotations nas nossas transaction. Para isso, teremos como exemplo uma aplicação bem simples para irmos direto ao ponto.
Lets go…
Starting…
Primeiro ponto é iniciarmos pelo arquivo de configuração do Spring. Antes disso, vou assumir que você tem os .jars necessários: mysql↳MySQL8 conteúdosMySQL + Adminer + Docker Compose: montando rapidamente um ambiente para usoData · abr 2019Banco de dados MYSQL no PHPStormDev (Back & Front) · jul 2019Criando um ambiente de desenvolvimento PHP mínimo com Docker – Parte 3Dev (Back & Front) · out 2019Ver tudo em Data → 5, hibernate 3.x, spring 3.x, aop, aspectJ.
Este é o projeto:
Configurando o Spring
A seguir, segue a configuração do Spring. Aproveitei e coloquei o comentário in line para facilitar o entendimento:
Cabeçalho
[xml]
<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:tx=“http://www.springframework.org/schema/tx”
xsi:schemaLocation=“http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd”>
[/xml]
E o restante:
[xml]
<context:component-scan base-package=“*”/>
<!– declarando a transation por default busca pelo id transactionManager –>
<tx:annotation-driven/>
<!– faz o translate das exception para Spring Exception –>
<bean class=“org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor”/>
<bean id=“transactionManager” class=“org.springframework.orm.hibernate3.HibernateTransactionManager”>
<property name=“sessionFactory” ref=“sessionFactory”/>
</bean>
[/xml]
Criando meu datasource:
[xml]
<bean id=“dataSource” class=“org.springframework.jdbc.datasource.DriverManagerDataSource”>
<property name=“driverClassName” value=“com.mysql.jdbc.Driver”/>
<property name=“url” value=“jdbc:mysql://localhost/test”/>
<property name=“username” value=“root”/>
<property name=“password” value=“camilo2593″/>
</bean>
[/xml]
Configurando o sessionFactory:
[xml]
<bean id=“sessionFactory” class=“org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean”>
<property name=“dataSource” ref=“dataSource”/>
<!– informando o package onde estão os beans annotated –>
<property name=“packagesToScan” value=“br.com.camilolopes.model.bean”/>
<!– aqui o Hibernate properties –>
<property name=“hibernateProperties”>
<props>
<prop key=“hibernate.dialect”>org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key=“hibernate.hbm2ddl.auto”>update</prop>
</props>
</property>
</bean>
</beans>
[/xml]
Onde está o segredo?
Exatamente nessa linha:
[java↳Java42 conteúdosNovidades do Java 26 (para desenvolvedores)Dev (Back & Front) · mar 2026Visual Studio Code para Java: o guia completo (dicas, configuração e extensões)Dev (Back & Front) · out 2025Quarkus: Modernizando a linguagem Java para a era da nuvemDev (Back & Front) · nov 2020Ver tudo em Dev (Back & Front) →]
<!– declarando a transation por default busca pelo id transactionManager –>
<tx:annotation-driven/>
[/java]
Pronto. Essa linha habilita reconhecer annotation @Transactional, que faremos logo a seguir.
Desenvolvendo
Vamos meter mão na massa na parte Java:
Entidade
[java]
@Entity
public class ProductTech implements Serializable{
private static final long serialVersionUID = -206121128264026525L;
@Id
@GeneratedValue
private Long id;
private String nameProduct;
//getters/setters omitidos
Interface DAO
public interface ProductDAO {
void save(ProductTech product);
}
[/java]
Implementação da Interface
[java]
@Repository
public class ProductDAOImpl implements ProductDAO {
private SessionFactory sessionFactory;
@Autowired
public ProductDAOImpl(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
private Session currentSession(){
return sessionFactory.getCurrentSession();
}
@Override //para execução deste método é requerido uma transação, é isso que estamos dizendo aqui
@Transactional(propagation=Propagation.REQUIRED,readOnly=false)
public void save(ProductTech product) {
currentSession().save(product);
System.out.println(“product saved with sucess”);
}
}
[/java]
Testando
E para testar vamos fazer dessa vez com uma classe que tem o método main, caso você ainda não esteja tão acostumado com unit test (deveria):
[java]
public class MainTestDAO {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(“config/springconfiguration.xml”);
ProductDAO bean = (ProductDAO) applicationContext.getBean(“productDAOImpl”);
ProductTech product= new ProductTech();
product.setNameProduct(“tablet samsung galaxy”);
bean.save(product);
}
}
[/java]
Resultado
É isso aí. Simples e fácil usar anotações para transações no Spring.
Abraços! Vou ficando por aqui.
See ya!!!









