Spring + Hibernate

Alguem tem algum um tutorial ou exemplo de como fazer uma integração do Spring com o hibernate.

*Quero utilizar o Spring para fazer a conexão com o banco de dados, ou seja, substituira a classe conexao
*Quero utilizar o Hibernate para fazer a persistências dos objetos, ou seja, substituirá o DAO

Já utilizei apenas o Spring para fazer conexão com o banco, agora não sei como integrar ele com o hibernate.

veja como eu fiz meu arquivo xml da conexão usando Spring:

[code]<?xml version="1.0" encoding="UTF-8"?>

<bean id="banco" class="modelo.Banco">
	<property name="banco">
		<value>sicer</value>
	</property>
	<property name="servidor">
		<value>localhost</value>
	</property>
	<property name="senha">
		<value></value>
	</property>
	<property name="usuario">
		<value>root</value>
	</property>
	<property name="url">
		<value>jdbc:mysql://</value>
	</property>
	<property name="classForName">
		<value>com.mysql.jdbc.Driver</value>
	</property>
</bean>

[/code]

e essa é a classe Conexao

[code]package persistencia;
import modelo.*;

import java.io.IOException;
import java.sql.*;
import com.mysql.jdbc.Connection;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.zkoss.zk.ui.Sessions;

public class Conexao{
private Banco banco;
private String url = “”;
public Connection conexao = null;
public Conexao() { }

public Connection abreConexaoBD() throws IOException, InterruptedException 
{
	ApplicationContext ctx = new ClassPathXmlApplicationContext("persistencia/spring.xml");
	banco = (Banco) ctx.getBean("banco");
	try {
		try {
			Class.forName(banco.getClassForName());
		} catch (ClassNotFoundException ex) {
			return null;
		}
		try {
			url = banco.getUrl() + banco.getServidor() + "/"+ banco.getBanco();
			this.conexao = (Connection) DriverManager.getConnection(url,banco.getUsuario(), banco.getSenha());
		} catch (SQLException ex) {return null;}
		return this.conexao;
	} catch (Exception e) {return null;}
}

}[/code]

agora como posso integrar o hibernate??

eu tenho um post já escrito sobre o assunto, mas n tá 100% ainda, sugiro vc dar uma procurada que acha: www.google.com.br :slight_smile:

Chegou a olhar na documentação que vem com o Spring?
Se não encontrou ela, pode dar uma lida na versão web: http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/orm.html#orm-hibernate

Eu tenho um exemplo em código de como fazer isto pra você.
No código fonte que disponibilizo junto com meu livro “Vire o Jogo com Spring Framework”, há um exemplo sobre como fazer isto.

Da uma olhada no repositório: https://github.com/loboweissmann/spring-forum/tree/master/spring-forum

O arquivo de configuração do Spring pode ser acessado neste link:

E finalmente, se te interessar, tem o meu livro também, que foi publicado pela Casa do Código.

Eu estou usando dois arquivos xml de configuração, são eles

app-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<context:annotation-config/>

<context:component-scan base-package="br.com.caelum.estoque"/>

<bean
	class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/views/" />
	<property name="suffix" value=".jsp" />
</bean>

<tx:advice id="txAdvice" transaction-manager="txnManager">
    <tx:attributes>
        <tx:method name="*"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="metodosProdutosController"
        expression="execution(*  br.com.caelum.estoque)"/>
</aop:config>

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

<tx:annotation-driven/>

e bd-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
    destroy-method="destroy">
    
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.connection.url">jdbc:mysql://localhost:3306/fj27</prop>
            <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
            <prop key="hibernate.connection.username">root</prop>
            <prop key="hibernate.connection.password">microsoft</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
    
   <property name="annotatedClasses">
       <list>
           <value>br.com.caelum.estoque.model.Produto</value>
       </list>
   </property>
</bean>

produtoController.java
package br.com.caelum.estoque;

import org.springframework.beans.factory.annotation.Autowired;

@Controller
@RequestMapping(value="/produtos")
public class ProdutoController {

@Autowired
private ProdutoDAO produtoDAO;

@RequestMapping(value="/listar", method=RequestMethod.GET)
public ModelAndView listar(){
	ModelAndView modelAndView = new ModelAndView("produtos/lista");
	modelAndView.addObject(produtoDAO.listar());
	return modelAndView;
}

@RequestMapping(value="/mostrar/{id}", method=RequestMethod.GET)
public ModelAndView mostrar(@PathVariable long id){
	ModelAndView modelAndView = new ModelAndView("produtos/mostrar");
	modelAndView.addObject(produtoDAO.buscarPorId(id));
	return modelAndView;
}

@RequestMapping(value="/form", method=RequestMethod.GET)
public String form(){
	return "produtos/form";
}

@RequestMapping(value="/salvar", method=RequestMethod.POST)
public String salvar(Produto produto){
	produtoDAO.salvar(produto);
	return "redirect:/produtos/listar.html";
}

public ModelAndView mostrar(@PathVariable Long id){
	ModelAndView modelAndView = new ModelAndView("produtos/mostrar");
	modelAndView.addObject(produtoDAO.buscarPorId(id));
	return modelAndView;
}

@RequestMapping(value="/alterar", method=RequestMethod.POST)
public String alterar(Produto produto){
	produtoDAO.alterar(produto);
	return "redirect:/produtos/listar.html";
}

@RequestMapping(value="/editar", method=RequestMethod.GET)
public ModelAndView editar(Long id){
	Produto produto = produtoDAO.buscarPorId(id);
	ModelAndView modelAndView = new ModelAndView("produtos/editar");
	modelAndView.addObject(produto);
	return modelAndView;
}

@RequestMapping(value="/apagar")
public void apagar(){
	
}	

}

ProdutoHibernateDAO.java
package br.com.caelum.estoque.dao;

import java.util.List;

public class ProdutoHibernateDAO implements ProdutoDAO {

private final SessionFactory sessionFactory;

@Autowired
public ProdutoHibernateDAO(SessionFactory factory){
	this.sessionFactory = factory;
}

@Override
public void salvar(Produto produto) {
	sessionFactory.getCurrentSession().save(produto);
}

@Override
public void alterar(Produto produto) {
	sessionFactory.getCurrentSession().update(produto);
}

@SuppressWarnings("unchecked")
@Override
public List<Produto> listar() {
	List<Produto> produtos = sessionFactory.getCurrentSession().createQuery("from Produto").list();
	return produtos;
}

@Override
public Produto buscarPorId(Long id) {
	return (Produto) sessionFactory.getCurrentSession().get(Produto.class, id);
}	

}

ProdutoMemoriaDAO.java
package br.com.caelum.estoque.dao;

import java.util.ArrayList;

@Repository
@Transactional
public class ProdutoMemoriaDAO implements ProdutoDAO {

private List<Produto> produtos = new ArrayList<Produto>();

public ProdutoMemoriaDAO(){
	Produto produto1 = new Produto();
	produto1.setDescricao("Mac Book");
	produto1.setQuantidade(1);
	produtos.add(produto1);
	
	Produto produto2 = new Produto();
	produto2.setDescricao("pen Drive");
	produto2.setQuantidade(10);
	produtos.add(produto2);
}

@Override
public void alterar(Produto produto) {
}

@Override
public Produto buscarPorId(Long id) {
	return produtos.get(id.intValue()-1);
}

@Override
public List<Produto> listar() {
	return produtos;
}

@Override
public void salvar(Produto produto) {
	produtos.add(produto);
}

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>


estoque

Spring MVC Dispatcher Servlet
org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

/WEB-INF/spring/-config.xml


1


Spring MVC Dispatcher Servlet
.html


index.jsp

Oi eu estou com o seguinte problema reportado

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet.init() for servlet Spring MVC Dispatcher Servlet threw exception
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Unknown Source)

root cause

java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
java.lang.Class.getDeclaredMethods0(Native Method)
java.lang.Class.privateGetDeclaredMethods(Unknown Source)
java.lang.Class.getDeclaredMethods(Unknown Source)
org.springframework.core.type.StandardAnnotationMetadata.hasAnnotatedMethods(StandardAnnotationMetadata.java:136)
org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.checkConfigurationClassCandidate(ConfigurationClassBeanDefinitionReader.java:320)
org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:157)
org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:132)
org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:584)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:405)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:443)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:459)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:340)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:307)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Unknown Source)

root cause

java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
java.lang.Class.getDeclaredMethods0(Native Method)
java.lang.Class.privateGetDeclaredMethods(Unknown Source)
java.lang.Class.getDeclaredMethods(Unknown Source)
org.springframework.core.type.StandardAnnotationMetadata.hasAnnotatedMethods(StandardAnnotationMetadata.java:136)
org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.checkConfigurationClassCandidate(ConfigurationClassBeanDefinitionReader.java:320)
org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:157)
org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:132)
org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:584)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:405)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:443)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:459)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:340)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:307)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Unknown Source)