Ajuda JPA e Hibernate

9 respostas
leohunther

Fala gente boa.
Estou fazendo um aplicativo local em java com Hibernate, só estou querendo usar JPA e Hirbernate, mas estou recebendo o seguinte erro:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Exception occurred during event dispatching:
javax.persistence.PersistenceException: [PersistenceUnit: JPAHibernate] Unable to build EntityManagerFactory
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
	at cliente.DaoCliente.addCliente(DaoCliente.java:16)

Tem mais linhas de erro depois dessa, mas pra não ficar muito grande só vou colocar até aí.

Meu arquivo persistence.xml está no META-INF dentro do src.

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http//java.sun.com/xml/ns/persistence" version="1.0" >
	<persistence-unit name="JPAHibernate" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<non-jta-data-source>jdbc/clienteHibernate</non-jta-data-source>
		<class>cliente.Cliente</class>
		<properties>
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" /> 
			<property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver" />
			<property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://127.0.0.1:1433/clienteHibernate" />
			<property name="hibernate.connection.username" value="clienteHibernate" />
			<property name="hibernate.connection.password" value="clienteHibernate16" />
		</properties>
	</persistence-unit>
</persistence>

Minha Entity:

package cliente;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "cliente")
public class Cliente implements Serializable{

	private static final long serialVersionUID = -2721501264755916247L;
	@Column(name="nome", length = 30, nullable=false)
	private String nome;
	@Column(name="endereco",length = 60, nullable=false)
	private String endereco;
	@Column(name="telefone",length = 10, nullable=false)
	private String telefone;
	@Id
	@Column(name="cod")
	private int cod;
		
	public Cliente() {
	}//fim construtor

	//Métodos getters e setters
	public int getCod() {
		return cod;
	}

	public void setCod(int cod) {
		this.cod = cod;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public String getTelefone() {
		return telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	
	
	
	

}

Controle:

Cliente cliente = new Cliente();
			cliente.setNome(FCliente.tNome.getText());
			cliente.setEndereco(FCliente.tEndereco.getText());
			cliente.setTelefone(FCliente.tTelefone.getText());
			DaoCliente daoCliente = new DaoCliente();
			daoCliente.addCliente(cliente);

DaoCliente:

package cliente;

import javax.ejb.Stateless;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import javax.persistence.EntityManager;
import javax.persistence.Query;
public class DaoCliente {
	
	@PersistenceContext
	private EntityManager manager;
	EntityManagerFactory factory;
		
	public void addCliente(Cliente cliente){
		factory = Persistence.createEntityManagerFactory("JPAHibernate");
		manager = factory.createEntityManager();
		manager.persist(cliente);
		manager.close();
	}//fim do método addCliente
	
	
	
}//fim da classe

Vi varios tutoriais no internet então consegui montar(acho) os jars. na versão certa.
baixei os últimos reliases (3.4.x) do hibernate.
Estou usando SQLServer 2000, consigo fazer tudo normalmente sem hibernate.
Qualquer ajuda eu agradeço, to querendo usar hibernate no meu projeto final.
Valeu gente boa.

9 Respostas

rdantas

E aí blz?

Bom, não sei q jar vc está usando como driver jdbc, mas verifique se o caminho da classe na propriedade 'Driver' é este mesmo., e também a url. Um outro problema possível é o seu classpath.

Se vc postar a exceção completa, talvez dê mais alguma pista.

Abraço,

Rodrigo

leohunther

po taí:

og4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Exception occurred during event dispatching:
javax.persistence.PersistenceException: [PersistenceUnit: JPAHibernate] Unable to build EntityManagerFactory
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
	at cliente.DaoCliente.addCliente(DaoCliente.java:16)
	at cliente.ControleCliente.actionPerformed(ControleCliente.java:17)
	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.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.Dialog$1.run(Unknown Source)
	at java.awt.Dialog$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.awt.Dialog.show(Unknown Source)
	at java.awt.Component.show(Unknown Source)
	at java.awt.Component.setVisible(Unknown Source)
	at java.awt.Window.setVisible(Unknown Source)
	at java.awt.Dialog.setVisible(Unknown Source)
	at cliente.FCliente.<init>(FCliente.java:93)
	at principal.ControlePrincipal.actionPerformed(ControlePrincipal.java:15)
	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.AbstractButton.doClick(Unknown Source)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.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.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(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.HibernateException: JDBC Driver class not found: net.sourceforge.jtds.jdbc.Driver
	at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:89)
	at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
	at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:89)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
	... 64 more
Caused by: java.lang.ClassNotFoundException: net.sourceforge.jtds.jdbc.Driver
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:123)
	at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:84)
	... 71 more

Valeu!

leohunther

Estou fazendo em JavaSE.
O que eu tenho que colocar nessa tag???
<non-jta-data-source></non-jta-data-source>

no persistence.xml???

faelcavalcanti

cadê o seu driver? olhe a exceção!

no problem.

leohunther:
O que eu tenho que colocar nessa tag???

nada. a não ser que você tenha implementado um datasource específico sem controle transacional pelo seu provider.

leohunther

Prezasdos, Em meio de tantos erros acabei deletando umas versões de bibliotecas e subistituindo por outras.
Aó sem querer deletei o jdbc também.
Valeu faelcavalcanti , obrigado.

E tirei a tag:
<non-jta-data-source></non-jta-data-source>

Dái recebo a mensagem:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.

Beleza, mas ainda não add o cliente no banco, quando vou na tabela continua em branco.
Será que tem algo haver com os annotations da Entity?
Vou continuar tentando qualquer coisa “posto” a resposta.

leohunther

grato a todos que ajudaram.
Consegui fazer o que eu queria então vou "postar" a resposta pra quem procurar.
No Código Anterior eu mudei:
persistence.xml

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;persistence xmlns="http//java.sun.com/xml/ns/persistence" version="1.0" &gt;
	&lt;persistence-unit name="JPAHibernate" transaction-type="RESOURCE_LOCAL"&gt;
		&lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt;
		&lt;class&gt;cliente.Cliente&lt;/class&gt;
		&lt;properties&gt;
			&lt;property name="hibernate.show_sql" value="true" /&gt;
			&lt;property name="hibernate.format_sql" value="true" /&gt;
			&lt;property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" /&gt; 
			&lt;property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver" /&gt;
			&lt;property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://127.0.0.1:1433/clienteHibernate;namedPipe=true" /&gt;
			&lt;property name="hibernate.connection.username" value="clienteHibernate" /&gt;
			&lt;property name="hibernate.connection.password" value="clienteHibernate16" /&gt;
		&lt;/properties&gt;
	&lt;/persistence-unit&gt;
&lt;/persistence&gt;

DaoCliente:

package cliente;

import javax.ejb.Stateless;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import javax.persistence.EntityManager;
import javax.persistence.Query;
@Stateless
public class DaoCliente {
	
	@PersistenceContext
	private EntityManager manager;
	EntityManagerFactory factory;
		
	public void addCliente(Cliente cliente){
		factory = Persistence.createEntityManagerFactory("JPAHibernate");
		manager = factory.createEntityManager();
		EntityTransaction tx = manager.getTransaction(); 
		tx.begin();
		manager.persist(cliente);
		tx.commit();
		manager.close();
		factory.close();
	}//fim do método addCliente
	
	
	public Cliente consultaCliente(String nome){
		factory = Persistence.createEntityManagerFactory("JPAHibernate");
		manager = factory.createEntityManager();
		EntityTransaction tx = manager.getTransaction(); 
		tx.begin();
		Query query = manager.createNativeQuery("select * from cliente where nome='"+nome+"'", Cliente.class);
		Cliente cliente = (Cliente)query.getSingleResult();
		tx.commit();
		manager.close();
		factory.close();
		return cliente;
	}//fim do método consultaCliente	
	
	
}//fim da classe

JDBC: jtds-1.2.2.jar
Banco de dados: SQLServer2000

importante: Na conexão com o banco você tem que colocar no persistence.xml o código: “;namedPipe=true”

Os Jars que eu coloquei:

antlr-2.7.6.jar
asm.jar
asm-attrs.jar
cglib.jar
commons-collections.jar
commons-logging.jar
dom4j-1.6.1.jar
ehcache-1.2.3.jar
ejb3-persistence.jar
hibernate3.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-entitymanager.jar
javaee.jar
javassist-3.4.GA.jar
jta-1.1.jar
jtds-1.2.2.jar
log4j.jar
slf4j-api.jar
slf4j-log4j12.jar

Valeu gente boa!!

faelcavalcanti

acho que você não está consegue se conectar via TCP/IP. retirei abaixo uma pequena sinopse que aborda o uso de named pipe

Named Pipes is also a networking protocol in the Server Message Block (SMB) suite, based on the use of a special Inter-process communication (IPC) share. SMB’s IPC can seamlessly and transparently pass the authentication context of the user across to Named Pipes. Windows NT’s entire NT Domain protocol suite of services are implemented as DCE/RPC services over Named Pipes, as are the Exchange 5.5 Administrative applications.

Windows NT Named Pipe authentication inheritance is sufficiently opaque and seamless to the user and developer perspective as to be nearly invisible, and consequently it is frequently misunderstood.


texto acima retirado de: http://en.wikipedia.org/wiki/Named_pipe

geralmente usado em LAN’s. nesta página da microsoft aborda o uso e diferencial de ambas.

leohunther

pelo que eu entendi o Named Pipes pode ser usado em netword, mas não é recomendado em network porque causa trafico excessivo de rede, e eu espero que o processo nomeado seja limpo pelo próprio servidor quando não for mais útil. Mas na segunda “posto” de novo, vou testar no trabalho e boto a resposta aqui, já que em casa não tenho nem servidor nem rede.
Valeu. Abs.

leohunther

fala aí pessoal.
é o seguinte:
Em conexão com banco local você tem que colocar o “namedPipe=true” no persistence.xml
mas em conexão com servidor pode ser com “namedPipe=true” ou sem isso no código. o padrão é sem “namedPipe=true”.
Valeu.

Criado 26 de setembro de 2008
Ultima resposta 29 de set. de 2008
Respostas 9
Participantes 3