Top Posts

Oportunidade na Accenture – Java

Continue lendo

Java Básico + Hibernate JPA + Mysql

Posted by camilolopes | Posted in BD, Hibernate | Posted on 11-01-2010

6


olá Pessoal,
Recebi alguns emails pedindo para criar um post mais puro com Hibernate + JPA, ou seja, sem o uso de JSF. Atendendo aos pedidos, montei um post bem simples, onde vamos criar a nossa velha classe Java com o método main e armazenar as informações em um BD (MySql) tendo o Hibernate como framework de persitencia. Entao se você deseja dar os primeiros passos usando os frameworks: Hibernate + JPA para persistencia de dados nao deixe de ler o post a seguir.
Lets go..
Outros posts.
– JSF + Hibernate + MySql no Eclipse
– Hibernate Annotations + JSF + MySql
– Busca com Hibernate Annotation + JSF
Atenção: Não apresentarei como criar um DB ou configurar o Hibernate no Eclipse. Qualquer dúvida consulte um dos posts acima. Vou considerar que você já tem um ambiente de desenvolvimento pronto para entrar em ação.
Dados do DataBase:

  • Crie um DataBase (usarei uma chamada livraria)
  • crie uma tabela (usarei uma tabela com o nome camilo )
  • Dados da tabela: id(auto_increment), nome(varchar), cidade(varchar)
  • Preparação do projeto
    1.Crie um o Java Project no Eclipse com o nome que achar conveniente.
    2.Agora crie uma estrutura de packages conforme a imagem a seguir

    3.Adicione os arquivos .jars do mysql, hibernate + JPA ao projeto. Clique com o botão direito no projeto escolha Properties e depois clique em JavaBuild. Na tela que aparece clique em Add external jars. (Caso nao tenha uma Library para os .jars )

    Desenvolvimento/Teste
    1.Agora crie uma classe Java com nome de Pessoa no package br.com.bean.

    2.Crie uma classe ConexaoHibert.java no package br.com.conexao

    3.Crie uma class PessoaDAO no package br.com.hibernatedao

    4.Agora crie uma arquivo .xml em source conforme o code abaixo:

    Fique atento aos nomes usado na class Pessoa.java para fazer anotação. Veja que eu tenho o nome da tabela no BD diferente do nome da minha class Java (fiz de proposito). Então somos obrigado a definir o name da tabela, caso contrario a JPA vai considerar o nome da classe.
    5.Agora crie uma classe no package br.com.teste com o nome de PessoaTest.java.

    6.Salve e execute a classe PessoaTest.java e verifique se os dados foram inseridos no BD.

    Pronto!Bem simples não? E menos cansativo que usar o velho padrão DAO. Espero que tenham gostado do post. Abracos e até o proximo post…


    Follow me: http://twitter.com/camilolope

    Related Posts with Thumbnails

    Comments (6)

    E ai meu amigo todo bem…

    Estou com um probleminha chato com o Hibernate… Literalmente fiz o CRTL+C e CTRL+V.

    E esta dando o seguinte erro:
    2 [main] INFO org.hibernate.cfg.annotations.Version – Hibernate Annotations 3.4.0.GA
    23 [main] INFO org.hibernate.cfg.Environment – Hibernate 3.3.0.SP1
    28 [main] INFO org.hibernate.cfg.Environment – hibernate.properties not found
    32 [main] INFO org.hibernate.cfg.Environment – Bytecode provider name : javassist
    37 [main] INFO org.hibernate.cfg.Environment – using JDK 1.4 java.sql.Timestamp handling
    121 [main] INFO org.hibernate.annotations.common.Version – Hibernate Commons Annotations 3.1.0.GA
    125 [main] INFO org.hibernate.cfg.Configuration – configuring from resource: hibernateconfig.xml
    125 [main] INFO org.hibernate.cfg.Configuration – Configuration resource: hibernateconfig.xml
    Exception in thread “main” java.lang.ExceptionInInitializerError
    at br.com.conexao.ConexaoHibernat.(ConexaoHibernat.java:23)
    at br.com.hiberntedao.PessoaDAO.Salvar(PessoaDAO.java:14)
    at br.com.teste.PessoaTest.main(PessoaTest.java:16)
    Caused by: org.hibernate.HibernateException: hibernateconfig.xml not found
    at org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:170)
    at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1439)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1461)
    at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:1017)
    at br.com.conexao.ConexaoHibernat.(ConexaoHibernat.java:19)
    … 2 more

    Será que vc pode me dar um help.. Falow Grande abraço.

    parece ser problemas de versao, vc está usando versoes compativeis dos seus arquivos .jar? e outro erro que ele nao encontrou seu arquivo de configuracao do hibernate, observe que o erro eh bem auto-explicativo. Eu no seu lugar baixava o hibernate nao versao beta e a versao jpa. Em um dos meus posts eu coloquei os arquivos ja para download exatos que precisa ter em lib, dar uma olhada ai no blog

    Ola Camilo tdb?
    Amei o artigo muito simples… eu fiz deu certo.. porém preciso de um exemplinho deste tipo focado para web usando hibernate e vraptor você pode me ajudar…

    Obrigada
    []s,
    Maira Fonseca.

    olá Maira,
    Obrigado pelo feedback Aqui no blog tem com JSF. Para vraptor eu nao tenho. Até pq nunca trabalhei com o framework, mas se vc aprendeu o vraptor é só adaptar. Eu acredito que no site do vraptor e na apostila dele o pessoal da caelum tem falado sobre o assunto.

    abracos,

    Olá Camilo.
    Gostei do seu exemplo testei no NetBeans e funcionou, gravou no BD,
    só que ele gera um erro que eu não sei o que é, se puder ajudar. Segue abaixo o erro.

    19/12/2011 13:42:59 org.hibernate.cfg.annotations.Version
    INFO: Hibernate Annotations 3.3.1.GA
    19/12/2011 13:42:59 org.hibernate.cfg.Environment
    INFO: Hibernate 3.2.5
    19/12/2011 13:42:59 org.hibernate.cfg.Environment
    INFO: hibernate.properties not found
    19/12/2011 13:42:59 org.hibernate.cfg.Environment buildBytecodeProvider
    INFO: Bytecode provider name : cglib
    19/12/2011 13:42:59 org.hibernate.cfg.Environment
    INFO: using JDK 1.4 java.sql.Timestamp handling
    19/12/2011 13:42:59 org.hibernate.cfg.Configuration configure
    INFO: configuring from resource: hibernateconfig.xml
    19/12/2011 13:42:59 org.hibernate.cfg.Configuration getConfigurationInputStream
    INFO: Configuration resource: hibernateconfig.xml
    19/12/2011 13:42:59 org.hibernate.cfg.Configuration doConfigure
    INFO: Configured SessionFactory:
    19/12/2011 13:42:59 org.hibernate.cfg.AnnotationBinder bindClass
    INFO: Binding entity from annotated class: br.com.bean.Pessoa
    19/12/2011 13:42:59 org.hibernate.cfg.annotations.EntityBinder bindTable
    INFO: Bind entity br.com.bean.Pessoa on table camilo
    19/12/2011 13:42:59 org.hibernate.cfg.AnnotationConfiguration secondPassCompile
    INFO: Hibernate Validator not found: ignoring
    19/12/2011 13:42:59 org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: Using Hibernate built-in connection pool (not for production use!)
    19/12/2011 13:42:59 org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: Hibernate connection pool size: 20
    19/12/2011 13:42:59 org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: autocommit mode: false
    19/12/2011 13:42:59 org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost/livraria
    19/12/2011 13:42:59 org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: connection properties: {user=li, password=****}
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: RDBMS: MySQL, version: 5.5.11
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.1.13 ( Revision: ${bzr.revision-id} )
    19/12/2011 13:42:59 org.hibernate.dialect.Dialect
    INFO: Using dialect: org.hibernate.dialect.MySQLDialect
    19/12/2011 13:42:59 org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
    INFO: Using default transaction strategy (direct JDBC transactions)
    19/12/2011 13:42:59 org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
    INFO: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Automatic flush during beforeCompletion(): disabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Automatic session close at end of transaction: disabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JDBC batch size: 15
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JDBC batch updates for versioned data: disabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Scrollable result sets: enabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JDBC3 getGeneratedKeys(): enabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Connection release mode: auto
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Maximum outer join fetch depth: 2
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Default batch fetch size: 1
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Generate SQL with comments: disabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Order SQL updates by primary key: disabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Order SQL inserts for batching: disabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
    INFO: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
    19/12/2011 13:42:59 org.hibernate.hql.ast.ASTQueryTranslatorFactory
    INFO: Using ASTQueryTranslatorFactory
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Query language substitutions: {}
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JPA-QL strict compliance: disabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Second-level cache: enabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Query cache: disabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory createCacheProvider
    INFO: Cache provider: org.hibernate.cache.NoCacheProvider
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Optimize cache for minimal puts: disabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Structured second-level cache entries: disabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Statistics: disabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Deleted entity synthetic identifier rollback: disabled
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Default entity-mode: pojo
    19/12/2011 13:42:59 org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Named query checking : enabled
    19/12/2011 13:42:59 org.hibernate.impl.SessionFactoryImpl
    INFO: building session factory
    19/12/2011 13:42:59 org.hibernate.impl.SessionFactoryObjectFactory addInstance
    INFO: Factory name:
    19/12/2011 13:42:59 org.hibernate.util.NamingHelper getInitialContext
    INFO: JNDI InitialContext properties:{}
    19/12/2011 13:42:59 org.hibernate.impl.SessionFactoryObjectFactory addInstance
    AVISO: Could not bind factory to JNDI
    javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
    at javax.naming.InitialContext.getNameParser(InitialContext.java:480)
    at org.hibernate.util.NamingHelper.bind(NamingHelper.java:52)
    at org.hibernate.impl.SessionFactoryObjectFactory.addInstance(SessionFactoryObjectFactory.java:90)
    at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:306)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
    at br.com.conexao.ConexaoHibert.(ConexaoHibert.java:26)
    at br.com.hibernatedao.PessoaDAO.Salvar(PessoaDAO.java:14)
    at br.com.teste.PessoaTest.main(PessoaTest.java:23)

    olá Miguel,
    Na verdade tu n teve error, e sim warn/aviso. Veja o nome do JNDI que vc deu se está correto. é questão de configuração mesmo.

    abracos,

    Write a comment