Hibernate - MYSQL

4 respostas
T

Olá!
Sou iniciante em java e estou desenvolvendo um pequeno sistema de gerenciamento.

Ao fazer um cadastro e tentar "salvar" acontece o seguinte: INFO: Not binding factory to JNDI, no JNDI name configured

21/10/2010 22:40:36 org.hibernate.cfg.annotations.Version <clinit>
INFO: Hibernate Annotations 3.3.0.GA
21/10/2010 22:40:36 org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.2
21/10/2010 22:40:36 org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
21/10/2010 22:40:36 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
21/10/2010 22:40:36 org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
21/10/2010 22:40:36 org.hibernate.ejb.Version <clinit>
INFO: Hibernate EntityManager 3.3.0.GA
21/10/2010 22:40:36 org.hibernate.cfg.AnnotationBinder bindClass
INFO: Binding entity from annotated class: DAO.CodigoN
21/10/2010 22:40:36 org.hibernate.cfg.annotations.QueryBinder bindQuery
INFO: Binding Named query: QTodosCodigosN => from CodigoN order by codigo
21/10/2010 22:40:36 org.hibernate.cfg.annotations.QueryBinder bindQuery
INFO: Binding Named query: QCodigoNByCodigo => from CodigoN where codigo = :codigo order by codigo
21/10/2010 22:40:36 org.hibernate.cfg.annotations.QueryBinder bindQuery
INFO: Binding Named query: QCodigoNByDescricao => from CodigoN where descricao = :descricao order by codigo
21/10/2010 22:40:36 org.hibernate.cfg.annotations.EntityBinder bindTable
INFO: Bind entity DAO.CodigoN on table CodigoN
21/10/2010 22:40:36 org.hibernate.cfg.AnnotationBinder bindClass
INFO: Binding entity from annotated class: DAO.OrgaoResp
21/10/2010 22:40:36 org.hibernate.cfg.annotations.QueryBinder bindQuery
INFO: Binding Named query: QTodosOrgaoResp => from OrgaoResp order by codigo
21/10/2010 22:40:36 org.hibernate.cfg.annotations.QueryBinder bindQuery
INFO: Binding Named query: QOrgaoRespByCodigo => from OrgaoResp where codigo = :codigo order by codigo
21/10/2010 22:40:36 org.hibernate.cfg.annotations.QueryBinder bindQuery
INFO: Binding Named query: QOrgaoRespByDescricao => from OrgaoResp where descricao = :descricao order by codigo
21/10/2010 22:40:36 org.hibernate.cfg.annotations.EntityBinder bindTable
INFO: Bind entity DAO.OrgaoResp on table OrgaoResp
21/10/2010 22:40:36 org.hibernate.cfg.AnnotationBinder bindClass
INFO: Binding entity from annotated class: DAO.LoginUsuario
21/10/2010 22:40:36 org.hibernate.cfg.annotations.QueryBinder bindQuery
INFO: Binding Named query: QTodosLogins => from LoginUsuario where pendenteAprovacao = :pendente
21/10/2010 22:40:36 org.hibernate.cfg.annotations.QueryBinder bindQuery
INFO: Binding Named query: QLoginByLogin => from LoginUsuario where login = :login and pendenteAprovacao = :pendente
21/10/2010 22:40:36 org.hibernate.cfg.annotations.QueryBinder bindQuery
INFO: Binding Named query: QLoginByNome => from LoginUsuario where nome = :nome and pendenteAprovacao = :pendente
21/10/2010 22:40:36 org.hibernate.cfg.annotations.QueryBinder bindQuery
INFO: Binding Named query: QLoginByAcesso => from LoginUsuario where organizador = :organizador and tecnico = :tecnico and atleta = :atleta and responsavelProva = :responsavelProva and pendenteAprovacao = :pendente
21/10/2010 22:40:36 org.hibernate.cfg.annotations.EntityBinder bindTable
INFO: Bind entity DAO.LoginUsuario on table LoginUsuario
21/10/2010 22:40:36 org.hibernate.cfg.AnnotationConfiguration secondPassCompile
INFO: Hibernate Validator not found: ignoring
21/10/2010 22:40:36 org.hibernate.cfg.AnnotationConfiguration secondPassCompile
INFO: Hibernate Validator not found: ignoring
21/10/2010 22:40:36 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Using Hibernate built-in connection pool (not for production use!)
21/10/2010 22:40:36 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Hibernate connection pool size: 20
21/10/2010 22:40:36 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: autocommit mode: true
21/10/2010 22:40:36 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/ocorrenciasambientais
21/10/2010 22:40:36 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: connection properties: {user=root, password=****, autocommit=true, release_mode=auto}
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: RDBMS: MySQL, version: 5.1.50-community
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.1.13 ( Revision: ${bzr.revision-id} )
21/10/2010 22:40:37 org.hibernate.dialect.Dialect <init>
INFO: Using dialect: org.hibernate.dialect.MySQLDialect
21/10/2010 22:40:37 org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
INFO: Transaction strategy: org.hibernate.transaction.JDBCTransactionFactory
21/10/2010 22:40:37 org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
INFO: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic flush during beforeCompletion(): disabled
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic session close at end of transaction: disabled
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC batch size: 15
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC batch updates for versioned data: disabled
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Scrollable result sets: enabled
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC3 getGeneratedKeys(): enabled
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Connection release mode: auto
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Maximum outer join fetch depth: 2
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default batch fetch size: 1
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Generate SQL with comments: disabled
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL updates by primary key: disabled
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
INFO: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
21/10/2010 22:40:37 org.hibernate.hql.ast.ASTQueryTranslatorFactory <init>
INFO: Using ASTQueryTranslatorFactory
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query language substitutions: {}
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JPA-QL strict compliance: enabled
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Second-level cache: enabled
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query cache: disabled
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory createCacheProvider
INFO: Cache provider: org.hibernate.cache.NoCacheProvider
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Optimize cache for minimal puts: disabled
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Structured second-level cache entries: disabled
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Statistics: disabled
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Deleted entity synthetic identifier rollback: disabled
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default entity-mode: pojo
21/10/2010 22:40:37 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Named query checking : enabled
21/10/2010 22:40:37 org.hibernate.impl.SessionFactoryImpl <init>
INFO: building session factory
21/10/2010 22:40:37 org.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: Not binding factory to JNDI, no JNDI name configured
Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: org.hibernate.HibernateException: The database returned no natively generated identity value
	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:219)
	at DAO.CodigoNDAO.save(CodigoNDAO.java:30)
	at controller.CodigoNController.actionPerformed(CodigoNController.java:33)
	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.AWTEventMulticaster.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: The database returned no natively generated identity value
	at org.hibernate.id.IdentifierGeneratorFactory.getGeneratedIdentity(IdentifierGeneratorFactory.java:33)
	at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:74)
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2154)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2634)
	at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
	at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
	at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131)
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87)
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
	at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618)
	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592)
	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596)
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:213)
	... 28 more

Segue abaixo as demais classes usadas:

PERSISTENCE

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="mycontext">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
      <property name="hibernate.connection.username" value="root"/>
      <property name="hibernate.connection.password" value="root"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/ocorrenciasambientais"/>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
    </properties>
  </persistence-unit>
</persistence>

MODEL

package model;

import java.util.Observable;

import DAO.CodigoN;

public class CodigoNModel extends Observable {
	private int codigo;
	private String descricao;
	private CodigoN codigoN;
	
	public CodigoN getCodigoN() {
		return codigoN;
	}
	public void setCodigoN(CodigoN codigoN) {
		this.codigoN = codigoN;
		if (codigoN != null) {
			this.codigo = codigoN.getCodigo();
			this.descricao = codigoN.getDescricao();			
		}
		setChanged();
		notifyObservers();
	}
	
	public int getCodigo() {
		return codigo;
	}
	public void setCodigo(int codigo) {
		this.codigo = codigo;
		notifyObservers();
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
		notifyObservers();
	}
	
}

DAO

package DAO;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class DAOFactory {
	
	public static DAOFactory getInstance() {
		if (instance == null) {
			instance = new DAOFactory();
		}
		return instance;
	}
	
	public DAOFactory() {
		emf = Persistence.createEntityManagerFactory("mycontext");
		em = emf.createEntityManager();
		orgaoRespDAO = new OrgaoRespDAO(em);
		codigoNDAO  = new CodigoNDAO(em);
		
		//loginDAO = new LoginUsuarioDAO(em);
		
	}

	public OrgaoRespDAO getOrgaoRespDAO() {
		return orgaoRespDAO;
	}
	
	public CodigoNDAO getCodigoNDAO() {
		return codigoNDAO;
	}
	
	

	/*public LoginUsuarioDAO getLoginDAO() {
		return loginDAO;
	}*/
}
package DAO;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;

@Entity

@NamedQueries({
    @NamedQuery(name="QTodosCodigosN",query="from CodigoN order by codigo"),
    @NamedQuery(name="QCodigoNByCodigo",query="from CodigoN where codigo = :codigo order by codigo"),
    @NamedQuery(name="QCodigoNByDescricao",query="from CodigoN where descricao = :descricao order by codigo"),
   
})

public class CodigoN implements Serializable {

	public static final String QUERY_TODOS_CODIGOSN = "QTodosCodigosN";
	public static final String QUERY_CODIGON_CODIGO = "QCodigoNByCodigo";
	public static final String QUERY_CODIGON_DESCRICAO = "QCodigoNByDescricao";
	private static final long serialVersionUID = 6655415509439596696L;

	@Id
	@GeneratedValue
	private int OID;
	@Column(nullable= false)
	private int codigo;
	@Column(nullable= false)
	private String descricao;

	public int getCodigo() {
		return codigo;
	}

	public void setCodigo(int codigo) {
		this.codigo = codigo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public int getOID() {
		return OID;
	}

	public void setOID(int oid) {
		OID = oid;
	}	
}
package DAO;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.NoResultException;
import javax.persistence.Query;

import model.PesquisaCodigoNModel;

import org.hibernate.exception.ConstraintViolationException;

import utils.OpcaoFiltro;

public class CodigoNDAO {
	private EntityManager em;
	
	public CodigoNDAO(EntityManager em) {
		this.em = em;
	}
	
	public void save(CodigoN codigoN) {
		EntityTransaction et = em.getTransaction();
		et.begin();
		
		if (em.contains(codigoN)) {
			em.merge(codigoN);
		} else {
			em.persist(codigoN);
		}
		et.commit();
	}
	
	public List<CodigoN> getCodigosN(OpcaoFiltro opcaoFiltro, String valor) {
		Query query;
		
		if (opcaoFiltro.getCodigo() == PesquisaCodigoNModel.OPCAO_CODIGO && !valor.equals("")) {
			query = em.createNamedQuery(CodigoN.QUERY_CODIGON_CODIGO);
		    query.setParameter("codigo", Integer.parseInt(valor));
		} else if (opcaoFiltro.getCodigo() == PesquisaCodigoNModel.OPCAO_DESCRICAO && !valor.equals("")) {
			query = em.createNamedQuery(CodigoN.QUERY_CODIGON_DESCRICAO);
		    query.setParameter("descricao", valor);
		} else {
			query = em.createNamedQuery(CodigoN.QUERY_TODOS_CODIGOSN);		    
		}
		return query.getResultList();
	}

	public CodigoN getCodigoNByCodigo(int codigo) throws Exception {
		CodigoN codigoN = null;
		String cons = "from CodigoN where codigo = ?";	
		Query qr = em.createQuery(cons);
		qr.setParameter(1, codigo);
		try {
			codigoN = (CodigoN) qr.getSingleResult();
			return codigoN;
		} catch (NoResultException e) {
			throw e;
		}	
	}

	public int getNovoCodigo() {
		CodigoN codigoN = null;
		String cons = "from CodigoN where codigo = (select max(codigo) from CodigoN)";
		Query qr = em.createQuery(cons);
		try {
			codigoN = (CodigoN) qr.getSingleResult();
			return codigoN.getCodigo() + 1;	
		} catch (NoResultException e) {
			return 1;
		}
	}
	public void remover(CodigoN codigoN) throws Exception {		
		try {
			EntityTransaction et = em.getTransaction();
			et.begin();
			em.remove(codigoN);
			et.commit();
		} catch (ConstraintViolationException ex) {
			throw ex;
		}		
	}
}

Obrigaaada :)

4 Respostas

AlexandreGama

Olá tatienevalle!

Creio que seja problema no seu GenerateValue. Tenta o seguinte:

Neste trecho:

@Id @GeneratedValue private int OID;

Até mais!

AlexandreGama

E só lembrando, o MySQL tem uma opção pra você indicar que a coluna é auto-incremento.
Este detalhe normalmente passa despercebido.

Até mais!

LPJava

http://blog.camilolopes.com.br/jpa-com-hibernate-jsf-mysql/

http://blog.camilolopes.com.br/java-basico-hibernate-jpa-mysql/

http://blog.camilolopes.com.br/hibernate-annotations-jsf-mysql/

http://blog.camilolopes.com.br/jsf-hibernate-mysql-no-eclipse/

ver se ajuda, flw!!

T

Consegui resolver!
Era na criação da tabela, eu não coloquei a opção Auto Incremento ao criar a tabela no banco de dados.
Obrigada pela ajuda pessoal. :slight_smile:

Criado 21 de outubro de 2010
Ultima resposta 26 de out. de 2010
Respostas 4
Participantes 3