hibernate executa select, mas insert e delete não.  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
kandrade
Entusiasta Java

Membro desde: 09/10/2007 12:30:22
Mensagens: 17
Offline

Boa tarde a todos,
estou com um problema no hibernate e como não tenho experiencia nele não sei nem como começar a solução.

Estou estudando a apostila da caelum FJ-21 no capítulo 16 - Hibernate 3.2 só que não estou usando exatamente as mesmas coisas dos exemplos.
Estou usando o Netbeans 6.5 e o SqlServer expression edition 2005.
Criei um novo projeto web e segui a apostila fazendo as devidas adaptações ao meu código.

Acontece que no teste o hibernate executa a pesquisa, mas ele não insere e nem deleta um dado.
Segue o código para inserir um produto:


A saída é:

12/02/2009 18:59:47 org.hibernate.cfg.annotations.Version <clinit>
INFO: Hibernate Annotations 3.3.1.GA
12/02/2009 18:59:47 org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.5
12/02/2009 18:59:47 org.hibernate.cfg.Environment <clinit>
INFO: loaded properties from resource hibernate.properties: {hibernate.connection.username=sa, hibernate.connection.password=****, hibernate.dialect=org.hibernate.dialect.SQLServerDialect, hibernate.show_sql=true, hibernate.connection.url=jdbc:jtds:sqlserver://localhost:1433/Db_kleber, hibernate.bytecode.use_reflection_optimizer=false, hibernate.connection.driver_class=net.sourceforge.jtds.jdbc.Driver}
12/02/2009 18:59:47 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
12/02/2009 18:59:47 org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
12/02/2009 18:59:47 org.hibernate.cfg.AnnotationBinder bindClass
INFO: Binding entity from annotated class: hibernate.Produto
12/02/2009 18:59:47 org.hibernate.cfg.annotations.EntityBinder bindTable
INFO: Bind entity hibernate.Produto on table Produto
12/02/2009 18:59:47 org.hibernate.cfg.AnnotationConfiguration secondPassCompile
INFO: Hibernate Validator not found: ignoring
12/02/2009 18:59:47 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Using Hibernate built-in connection pool (not for production use!)
12/02/2009 18:59:47 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Hibernate connection pool size: 20
12/02/2009 18:59:47 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: autocommit mode: false
12/02/2009 18:59:47 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: using driver: net.sourceforge.jtds.jdbc.Driver at URL: jdbc:jtds:sqlserver://localhost:1433/Db_kleber
12/02/2009 18:59:47 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: connection properties: {user=sa, password=****}
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: RDBMS: Microsoft SQL Server, version: 09.00.3077
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC driver: jTDS Type 4 JDBC Driver for MS SQL Server and Sybase, version: 1.2.2
12/02/2009 18:59:48 org.hibernate.dialect.Dialect <init>
INFO: Using dialect: org.hibernate.dialect.SQLServerDialect
12/02/2009 18:59:48 org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
INFO: Using default transaction strategy (direct JDBC transactions)
12/02/2009 18:59:48 org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
INFO: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic flush during beforeCompletion(): disabled
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic session close at end of transaction: disabled
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Scrollable result sets: enabled
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC3 getGeneratedKeys(): enabled
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Connection release mode: auto
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default batch fetch size: 1
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Generate SQL with comments: disabled
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL updates by primary key: disabled
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL inserts for batching: disabled
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
INFO: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
12/02/2009 18:59:48 org.hibernate.hql.ast.ASTQueryTranslatorFactory <init>
INFO: Using ASTQueryTranslatorFactory
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query language substitutions: {}
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JPA-QL strict compliance: disabled
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Second-level cache: enabled
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query cache: disabled
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory createCacheProvider
INFO: Cache provider: org.hibernate.cache.NoCacheProvider
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Optimize cache for minimal puts: disabled
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Structured second-level cache entries: disabled
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Echoing all SQL to stdout
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Statistics: disabled
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Deleted entity synthetic identifier rollback: disabled
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default entity-mode: pojo
12/02/2009 18:59:48 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Named query checking : enabled
12/02/2009 18:59:48 org.hibernate.impl.SessionFactoryImpl <init>
INFO: building session factory
12/02/2009 18:59:48 org.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: Not binding factory to JNDI, no JNDI name configured
Hibernate: insert into Produto (descricao, nome, preco) values (?, ?, ?)
CONSTRUÍDO COM SUCESSO (tempo total: 4 segundos)


Porém quando abro o banco e listo os dados esse produto não foi inserido.
Vini Fernandes
Virtual Machine Man
[Avatar]

Membro desde: 20/01/2009 08:43:02
Mensagens: 523
Offline

Cara, veja se o seu metodo DAO.salva() executa o comando commit().

abracao

What do you know about Java? Help me!
[MSN]
kandrade
Entusiasta Java

Membro desde: 09/10/2007 12:30:22
Mensagens: 17
Offline

Não tem commit não.
Veja o código:



Não consegui executar o commit, como ficaria o código com ele?

Obrigado pela atenção.
Vini Fernandes
Virtual Machine Man
[Avatar]

Membro desde: 20/01/2009 08:43:02
Mensagens: 523
Offline

Entao cara, para persistir as informcoes no banco voce tem que incluir seu entity bean no contexto de persistencia do hibernate,isto é, todas as vezes que voce instanciar um novo objeto devera fazer algo como:

Resumindo, seu metodo salvar deve estar assim:


Abracao.

This message was edited 1 time. Last update was at 12/02/2009 18:39:55


What do you know about Java? Help me!
[MSN]
moacirjava
Virtual Machine Man
[Avatar]

Membro desde: 11/01/2008 11:31:08
Mensagens: 658
Localização: Minas Gerais
Offline

Experimenta fazer assim...



Você tem uma boa apostila ou tutorial de como fazer mapeamento de classes no Hibernate?

This message was edited 1 time. Last update was at 13/02/2009 07:07:30


"Para conseguir algo que você nunca teve, precisa fazer algo que nunca fez."

Analista de Sistemas.
SCJP 5


Jair Rillo Junior
Moderador
[Avatar]

Membro desde: 29/04/2003 21:19:53
Mensagens: 2524
Localização: São Paulo / Campinas
Offline

Embora você esteja começando com Hibernate, aconselho fortemente você estudar a parte de transaction dele. Isso vai te ajudar a entender o conceito de transação e como trabalhar com transações com o hibernate, seja em ambiente JSE (que é seu exemplo) ou JEE.

http://www.hibernate.org/hib_docs/v3/reference/en-US/html/transactions.html

Jair Rillo Junior

http://www.jairrillo.com/blog | Twitter | SCJA, SCJP, SCWCD, SCBCD, IBM SOA Associate
kandrade
Entusiasta Java

Membro desde: 09/10/2007 12:30:22
Mensagens: 17
Offline

Muito obrigado a todos pela atenção.
Com transaction ficou perfeito.


Você tem uma boa apostila ou tutorial de como fazer mapeamento de classes no Hibernate?


Não tenho, a primeira vez que uso hibernate e segui a apostila FJ-21 da Caelum.


Embora você esteja começando com Hibernate, aconselho fortemente você estudar a parte de transaction dele. Isso vai te ajudar a entender o conceito de transação e como trabalhar com transações com o hibernate, seja em ambiente JSE (que é seu exemplo) ou JEE.


Muito obrigado pela dica. Vou estudar sim.

Anderson Leite
Java Ninja
[Avatar]

Membro desde: 03/03/2005 09:53:07
Mensagens: 275
Offline

O save() do hibernate não salva coisas no banco. Essa costuma ser a maior dificuldade no uso do hibernate.

Ao chamar o método save você está tornando-o managed(ou persistent), ou seja, agora o hibernate pode gerenciar esse objeto pra você.

Os dados de objetos managed só são atualizados no banco quando a transaction dispara o commit.

Por que funciona com o flush ?
Porque o flush do hibernate serve pra atualizar sua base com todos os objetos que estão no estado managed da sua session.

[WWW] [MSN]
clebiovieira
JavaChild
[Avatar]

Membro desde: 07/09/2009 22:53:56
Mensagens: 101
Localização: Rio de Janeiro
Offline

Anderson Leite wrote:O save() do hibernate não salva coisas no banco. Essa costuma ser a maior dificuldade no uso do hibernate.

Ao chamar o método save você está tornando-o managed(ou persistent), ou seja, agora o hibernate pode gerenciar esse objeto pra você.

Os dados de objetos managed só são atualizados no banco quando a transaction dispara o commit.

Por que funciona com o flush ?
Porque o flush do hibernate serve pra atualizar sua base com todos os objetos que estão no estado managed da sua session.


Sucinto, porém esclarecedor. abs






[WWW] [MSN]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team