GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

[RESOLVIDO]Hibernate PostgreSQL


#1

Oi galera este é o meu primeiro Tópico. Estou mais de um mês tentando solucionar este problema com PostgreSQL com Hibernate até agora nada.

Persistence

<persistence version="2.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_2_0.xsd">	
	<persistence-unit name="lojavirtualDB" transaction-type="RESOURCE_LOCAL">
	    <provider>org.hibernate.ejb.HibernatePersistence</provider>
	    <class>entities.Produto</class>
	    <properties>	    	
	    	<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> 
	    	<property name="hibernate.hbm2dll.auto" value="update"/>
	    	<property name="hibernate.show_sql" value="true"/>	    	
	    	<property name="hibernate.format_sql" value="true"/>
	    	<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
	    	<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost/lojavirtualDB"/>	        
	        <property name="javax.persistence.jdbc.user" value="XXX"/>
	        <property name="javax.persistence.jdbc.password" value="XXX"/>	        	   
	        <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>  
      		<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>  	            	        
	    </properties>	      
	</persistence-unit>	 
</persistence>

Entidade Produto

@Entity
@SequenceGenerator(name = "exemplo", sequenceName = "exemplo")
// Criar sequência antes no BD
public class Produto {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "exemplo")
	int id;		
	String nome;
	double preco;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public double getPreco() {
		return preco;
	}
	public void setPreco(double preco) {
		this.preco = preco;
	}	
}

Classe inserir

public static void main(String[] args) {
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("lojavirtualDB");
		EntityManager em = factory.createEntityManager();
		Produto p = new Produto();
		p.setNome("camiseta");
		p.setPreco(12.23);
		em.getTransaction().begin();
		em.persist(p);
		em.getTransaction().commit();
	}

Gera o seguinte erro:

0 [main] INFO  org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.5.4-Final
1 [main] INFO  org.hibernate.cfg.Environment - Hibernate 3.5.4-Final
21 [main] INFO  org.hibernate.cfg.Environment - hibernate.properties not found
21 [main] INFO  org.hibernate.cfg.Environment - Bytecode provider name : javassist
21 [main] INFO  org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
151 [main] INFO  org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
151 [main] INFO  org.hibernate.ejb.Version - Hibernate EntityManager 3.5.4-Final
861 [main] INFO  org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: entities.Produto
931 [main] INFO  org.hibernate.cfg.annotations.EntityBinder - Bind entity entities.Produto on table Produto
981 [main] INFO  org.hibernate.cfg.AnnotationConfiguration - Hibernate Validator not found: ignoring
1041 [main] INFO  org.hibernate.cfg.search.HibernateSearchEventListenerRegister - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
1222 [main] INFO  org.hibernate.connection.DriverManagerConnectionProvider - Using Hibernate built-in connection pool (not for production use!)
1222 [main] INFO  org.hibernate.connection.DriverManagerConnectionProvider - Hibernate connection pool size: 20
1222 [main] INFO  org.hibernate.connection.DriverManagerConnectionProvider - autocommit mode: true
1562 [main] INFO  org.hibernate.connection.DriverManagerConnectionProvider - using driver: org.postgresql.Driver at URL: jdbc:postgresql://localhost/lojavirtualDB
1562 [main] INFO  org.hibernate.connection.DriverManagerConnectionProvider - connection properties: {user=postgres, password=****, autocommit=true, release_mode=auto}
1642 [main] INFO  org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.PostgreSQLDialect
1652 [main] INFO  org.hibernate.engine.jdbc.JdbcSupportLoader - Disabling contextual LOB creation as connection was null
1662 [main] INFO  org.hibernate.transaction.TransactionFactoryFactory - Transaction strategy: org.hibernate.transaction.JDBCTransactionFactory
1672 [main] INFO  org.hibernate.transaction.TransactionManagerLookupFactory - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - Automatic flush during beforeCompletion(): disabled
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - Automatic session close at end of transaction: disabled
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - Scrollable result sets: disabled
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - JDBC3 getGeneratedKeys(): disabled
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - Connection release mode: auto
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - Default batch fetch size: 1
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - Generate SQL with comments: disabled
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - Order SQL updates by primary key: disabled
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - Order SQL inserts for batching: disabled
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
1672 [main] INFO  org.hibernate.hql.ast.ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - Query language substitutions: {}
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - JPA-QL strict compliance: enabled
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - Second-level cache: enabled
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - Query cache: disabled
1672 [main] INFO  org.hibernate.cfg.SettingsFactory - Cache region factory : org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge
1682 [main] INFO  org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge - Cache provider: org.hibernate.cache.NoCacheProvider
1682 [main] INFO  org.hibernate.cfg.SettingsFactory - Optimize cache for minimal puts: disabled
1682 [main] INFO  org.hibernate.cfg.SettingsFactory - Structured second-level cache entries: disabled
1682 [main] INFO  org.hibernate.cfg.SettingsFactory - Echoing all SQL to stdout
1682 [main] INFO  org.hibernate.cfg.SettingsFactory - Statistics: disabled
1682 [main] INFO  org.hibernate.cfg.SettingsFactory - Deleted entity synthetic identifier rollback: disabled
1682 [main] INFO  org.hibernate.cfg.SettingsFactory - Default entity-mode: pojo
1682 [main] INFO  org.hibernate.cfg.SettingsFactory - Named query checking : enabled
1682 [main] INFO  org.hibernate.cfg.SettingsFactory - Check Nullability in Core (should be disabled when Bean Validation is on): enabled
1862 [main] INFO  org.hibernate.impl.SessionFactoryImpl - building session factory
2202 [main] INFO  org.hibernate.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured
Hibernate: 
    select
        nextval ('exemplo')
Hibernate: 
    insert 
    into
        Produto
        (nome, preco, id) 
    values
        (?, ?, ?)
3123 [main] WARN  org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42P01
3123 [main] ERROR org.hibernate.util.JDBCExceptionReporter - ERRO: relação "produto" não existe
  Posição: 13
3133 [main] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.SQLGrammarException: could not insert: [entities.Produto]
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2438)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2858)
	at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:260)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:179)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76)
	at testes.TestainsereProdutoPostgreSQL.main(TestainsereProdutoPostgreSQL.java:23)
Caused by: org.postgresql.util.PSQLException: ERRO: relação "produto" não existe
  Posição: 13
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:363)
	at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:46)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2418)
	... 12 more
Exception in thread "main" javax.persistence.RollbackException: Error while committing the transaction
	at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:93)
	at testes.TestainsereProdutoPostgreSQL.main(TestainsereProdutoPostgreSQL.java:23)
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not insert: [entities.Produto]
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1235)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1168)
	at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:81)
	... 1 more
Caused by: org.hibernate.exception.SQLGrammarException: could not insert: [entities.Produto]
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2438)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2858)
	at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:260)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:179)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76)
	... 1 more
Caused by: org.postgresql.util.PSQLException: ERRO: relação "produto" não existe
  Posição: 13
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:363)
	at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:46)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2418)
	... 12 more

Por favor me ajudem, pois este mesmo código funciona com MySQl, mas necessito que seja no PostgreSQL


#2

e se você colocar seu campo int id como private? O.o

Outra coisa, o problema não seria o nome da tabela produto?


#3

Hebert Coelho, obrigado pela ajuda.
Troquei os modificadores de acesso para private e erro continuou.
Em relação ao nome do Produto, se eu não estiver enganado quando introduzo @Entity o nome da classe vai ser o nome da tabela criada. Por esse motivo acredito que o nome não esteja errado. Esta codificação funciona perfeitamente no MySQL e no PostgreSQL fica este erro.


#4

Pelo erro o hibernate não está encontrando a tabela produto...

confirma se no banco existe a tabela produto

Se não critou tenta mudar a configuração do hibernante
De
hibernate.hbm2dll.auto" value="update"
Para
hibernate.hbm2ddl.auto" value="update"


#5

Só tome cuidado que o postgres é bem chato quanto a nome.

As vezes ele precisa de aspas ou camel case...

Faz o que o parceiro disse, deixa o hibernate criar a tabela automaticamente e veja como vai ficar o nome da tabela. Veja c vai ficar igual.


#6

Fala galera.
No meu Persistence já utilizava a property hibernate.hbm2dll.auto" value="update" e também já coloquei o value="create".
O mesmo erro continua.
O hibernate com este código não consegue nem criar a tabela Produto no PostgreSQl enquanto no MySQL fica OK.
Obrigado pela ajuda, ajuda sempre é bem-vinda.


#7

Como está o nome da sua tabela??


#8

O nome da tabela é Produto e também já tentei produto minúsculo .

@Entity
@SequenceGenerator(name = "exemplo", sequenceName = "exemplo")
public class produto {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "exemplo")
	private int id;		
	private String nome;
	private double preco;

Hebert uma dúvida, não preciso criar na mão as tabelas no PostgreSQL ?
Pois com MySQL eu não precisei Hibernate fez tudo por mim.


#9

[quote=JuoneBR]O nome da tabela é Produto e também já tentei produto minúsculo .

@Entity
@SequenceGenerator(name = "exemplo", sequenceName = "exemplo")
public class produto {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "exemplo")
	private int id;		
	private String nome;
	private double preco;

Hebert uma dúvida, não preciso criar na mão as tabelas no PostgreSQL ?
Pois com MySQL eu não precisei Hibernate fez tudo por mim.[/quote]No postgres ele já faz isso automático também.
Não foi?


#10

Juoner hbm2dll esta errado

o correto é com 2 d não 2 l

Muda de
hibernate.hbm2dll.auto
para
hibernate.hbm2ddl.auto


#11

Obrigado fernandoat funcionou, que erro besta.
Quebrando a cabeça já fazia um bom tempo, Valeu mesmo.
Obrigado Hebert Coelho pela ajuda.
Obrigado a todos que me ajudaram, valeu.
:smiley:


#12

Obrigado fernandoat funcionou, que erro besta.
Quebrando a cabeça já fazia um bom tempo, Valeu mesmo.
Obrigado Hebert Coelho pela ajuda.
Obrigado a todos que me ajudaram, valeu.
:smiley:


#13