Hibernate+swing+Hsqldb

Bom dia !!!

Seguinte, to tentando aprender Java usando o Hibernate…mas não to conseguindo, fiz um pequeno exemplo mas nao ta funcionando, to usando o banco de dados HsqlDB e Swing também…toda vez que aciono o botão gravar a parece o um erro… meu projeto esta assim, dentro do meu diretório do projeto tenho uma pasta lib com os arquivos (hibernate3.jar, commons-beanutils.jar, hsqldb.jar entre outros) e um database com os arquivos do banco de dados…anexei os arquivos .java , hbm.xml e cfg.xml…

Anexei os arquivos do projeto…

Minha tabela foi gerada com este script: CREATE CACHED TABLE TBDADOS(IDCODIGO INTEGER NOT NULL PRIMARY KEY,SENHA VARCHAR(10) NOT NULL,NOME VARCHAR(50),NASC INTEGER,TEL INTEGER)

O erro que aparece é o seguinte:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread “AWT-EventQueue-0” java.lang.ExceptionInInitializerError
at Hutil.(Hutil.java:28)
at TelaCadastro$TrataBotoes.actionPerformed(TelaCadastro.java:111)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.hibernate.MappingException: Error reading resource: tbdados.hbm.xml
at org.hibernate.cfg.Configuration.addResource(Configuration.java:452)
at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1263)
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1235)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1217)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1184)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1112)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1098)
at Hutil.(Hutil.java:23)
… 25 more
Caused by: org.hibernate.PropertyNotFoundException: field not found: id
at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:96)
at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:103)
at org.hibernate.property.DirectPropertyAccessor.getGetter(DirectPropertyAccessor.java:111)
at org.hibernate.util.ReflectHelper.getter(ReflectHelper.java:90)
at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:78)
at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:275)
at org.hibernate.cfg.HbmBinder.bindSimpleId(HbmBinder.java:360)
at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:294)
at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:236)
at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:152)
at org.hibernate.cfg.Configuration.add(Configuration.java:362)
at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:400)
at org.hibernate.cfg.Configuration.addResource(Configuration.java:449)
… 32 more

VocÊ precisa da biblioteca do log4j!

Bom… na verdade é o que parece, pelo erro né!

Primeiro vc deve ter a biblioteca commons-logging na sua aplicação… Então ai deveria funcionar!

Se você quiser usar o log4j, vc deve então colocar a biblioteca dele em sua aplicação e um arquivo de properties (ou xml) contendo a configuração do log4j!

Abraços!
Thiago

Bom dia Thiago, tenho todas esta bibliotecas no meu projeto, inclusive a log4j, sei que tem arquivo sobrando…mas assim que funcionar eu excluo o q não é necessário…

antlr-2.7.5H3.jar
asm.jar
asm-attrs.jar
c3p0-0.8.5.2.jar
cglib-2.1.jar
cleanimports.jar
commons-beanutils.jar
commons-collections-2.1.1.jar
commons-digester.jar
commons-logging-1.0.4.jar
concurrent-1.3.2.jar
connector.jar
dom4j-1.6.jar
ehcache-1.1.jar
ejb3-persistence.jar
hibernate3.jar
hsqldb.jar
jaas.jar
jacc-1_0-fr.jar
jaxen-1.1-beta-4.jar
jboss-cache.jar
jboss-common.jar
jboss-jmx.jar
jboss-system.jar
jboss-system.jar
jgroups-2.2.7.jar
jta.jar
junit-3.8.1.jar
log4j-1.2.9.jar
oscache-2.1.jar
proxool-0.8.3.jar
servlet.jar
spring-beans.jar
spring-core.jar
spring-web.jar
struts.jar
swarmcache-1.0rc2.jar
taglibs-input.jar
versioncheck.jar
xerces-2.6.2.jar
xml-apis.jar

Acho q o erro é que o seu hbm está tentando achar uma propriedade chamada “id”, o q, de acordo com o seu JavaBean e com o seu “telacadastro.java” não existe.
O q exitse no lugar, pelo o q eu pude entender eh a propriedade “_iCodigo”.

Eu acho q eh isso…

Ah sim…
pra resolver, tenta colocar isso no teu hbm no lugar de onde está o teu id:

       <id
            name="_iCodigo"
            column="IDCODIGO"
            type="java.lang.Integer"
        >
            <generator class="increment"/>
        </id>

A ajuda de Vivi_Grieco tem mais sentido!

Deve ser este mesmo o problema!

Não deve ser, é.

Caused by: org.hibernate.PropertyNotFoundException: field not found: id.

Você esqueceu de mapear a proprieade ‘id’. Como a srta. Greco apontou, declare a propriedade de acordo com as regras do seu banco de dados.

Oi Vivi…com sua ajuda consegui resolver o problema realmente era no hbm.xml…so que mesmo assim nao dando or erros anteriores ele nao insere os dados no banco…e nao da nenhuma menssagem de erro…o q pode ser agora?

Tambem fiz mais algumas alterações no hbm:

<?xml version="1.0"?>
<class name="tbdados" table="tbdados">

	<id
         name="_iCodigo"
         column="IDCODIGO"
         type="java.lang.Integer"
     >
         <generator class="increment"/>
     </id>
	
	<property name="_sSenha" >
	<column name="senha" not-null="true"/>
	</property>		
	
	<property name="_sNome" >
	<column name="nome"  not-null="true" />
	</property>		

	<property name="_iDataNas">
	<column name="nasc" not-null="true" />
	</property>	
	
	<property name="_iTel" >
	<column name="tel" not-null="true" />
	</property>

</class>

Não aparece nenhum erro mesmo? E o sql, aparece?

Vivi, aparece a msg abaixo:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Initializing c3p0 pool… com.mchange.v2.c3p0.PoolBackedDataSource@6a3960 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@738d08 [ acquireIncrement -> 1, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, idleConnectionTestPeriod -> 0, initialPoolSize -> 5, maxIdleTime -> 1800, maxPoolSize -> 20, maxStatements -> 50, maxStatementsPerConnection -> 0, minPoolSize -> 5, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@be49e0 [ description -> null, driverClass -> null, factoryClassLocation -> null, jdbcUrl -> jdbc:hsqldb:file:C:/eclipse/workspace/CadArtur/database/tbdados, properties -> {user=******, password=******} ] , preferredTestQuery -> null, propertyCycle -> 300, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, usesTraditionalReflectiveProxies -> false ] , factoryClassLocation -> null, numHelperThreads -> 3, poolOwnerIdentityToken -> 6a3960 ]
Hibernate: insert into tbdados (senha, nome, nasc, tel, IDCODIGO) values (?, ?, ?, ?, ?)
[size=7][/size]

Coloca esse aquivo aqui dentro do seu classpath Márcio, ele vai escrever as mensagens de log em um arquivo e no console, deve facilitar um pouco descobrir o que está acontecendo.

Mauricio, fiz isso mas nao ta aparecendo mais nenhuma informação no console, aparece a mesma informação que passei pra Vivi

Funcionou…obrigado…é o HSqldb que ta demorando pra atualizar os dados…valeu mesmo pela ajuda…