Boa tarde,
Estou utilizando o Postgres em um novo projeto e estou pegando esta exception estranha.
Utilizo hibernate Annotation + Spring
Caused by: org.postgresql.util.PSQLException: ERRO: relação "dual" não existe
Posição: 15
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:252)
at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
at org.apache.commons.dbcp.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:332)
at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1249)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1221)
... 27 more
minha classe mapeada
@Entity
@SequenceGenerator(name = "SEQ_IMAGEM", sequenceName = "seq_imagem")
@Table(name = "imagem")
public class Imagem implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_IMAGEM")
@Column(name = "id_imagem")
private Integer idImagem;
@Column(name = "nome_imagem")
private String nomeImagem;
@Lob
@Column(name = "imagem")
private byte[] imagem;
Obrigado e t+
Esse erro é porque seu DIALECT está para Oracle e não para PostgreSQL.
Blz, garcia-jj.
No spring esta definido assim como org.hibernate.dialect.PostgreSQLDialect
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<value>net.teste.dao.Imagem</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.default_schema">english</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
Desculpe a demora, perdi esse tópico, hehe.
Hmm, mas há algo estranho. O objeto dual existe apenas no Oracle mesmo. A impressão que eu tenho é que ele está usando o dialect do Oracle. O ideal é você colocar o debug da categoria SQL do Hibernate para debug, assim você pode ver qual o SQL gerado e tentar ver se é alguma consulta manual sua e até mesmo entender qual dialect ele está usando.
[2010-02-02 09:54:56,967] INFO org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.PostgreSQLDialect
[2010-02-02 09:54:56,967] INFO org.hibernate.transaction.TransactionFactoryFactory - Transaction strategy: org.springframework.orm.hibernate3.SpringTransactionFactory
Ta setado pra o postgres mano! Ae criei uma outra tabela! mesmo erro.
Fiz conexão via JDBC e funcionou!
Vi em algum forum que o erro é na criação da sequence no postgres 8.
Valeu pela ajuda!
So pode ser a versão que estou utilizando, pois ja usei o postgres e nunca deu estes erros medonhos.
Vou baixar a versão 8.0 e ver o que rola! Estou usando a vs 8.4
Tem alguma conf. a mais na configuração em maquinas windows???
Estou usando windows xp.
Obrigado e t+
Muito estranho. Tenho uma aplicação aqui que usa a 8.4 e o dialect normal. Agora estou em viagem, mas assim que chegar em casa vou pesquisar melhor no meu projeto e vamos comparar os projetos para ver onde é o erro.
Abs
posta o trecho do código de onde é lançada a exceção. será que num tem nenhuma query ai com “select sysdate from dual” ?
Blz Pessoal!
Aqui esta o codigo que faço a chamada:
public static void main(String[] args) throws Exception{
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:spring-context.xml");
ImagemDao imagemDao = (ImagemDao)ctx.getBean("imagemDao");
Imagem im = new Imagem();
im.setNomeImagem("teste.jpg");
imagemDao.gravarImagem(im);
System.out.println("Funciona poxxx");
}
Exception mais detalhada.
Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [null]; error code [0]; Cannot create PoolableConnectionFactory (ERRO: relação "dual" não existe
Posição: 15); nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ERRO: relação "dual" não existe
Posição: 15)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.orm.hibernate3.HibernateAccessor.convertJdbcAccessException(HibernateAccessor.java:424)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:410)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:694)
at net.englishmates.dao.HibernateDAOGenerico.salvar(HibernateDAOGenerico.java:77)
at net.englishmates.dao.ImagemHibernateDao.gravarImagem(ImagemHibernateDao.java:17)
at net.englishmates.dao.Teste.main(Teste.java:13)
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ERRO: relação "dual" não existe
Posição: 15)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1225)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:82)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.AbstractBatcher.prepareSelectStatement(AbstractBatcher.java:123)
at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:73)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:99)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:697)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
... 5 more
Caused by: org.postgresql.util.PSQLException: ERRO: relação "dual" não existe
Posição: 15
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:252)
at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
at org.apache.commons.dbcp.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:332)
at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1249)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1221)
... 22 more
Puts! olha so a merda que estava fazendo. Cabeça no oracle da nisto!!!
Como uso o oracle no trampo, não me liguei nesta propriedade.
Valeu pessoal!
<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql:desenvolvimento" />
<property name="username" value="banco" />
<property name="password" value="banco" />
<property name="validationQuery" value="select 1 from dual"/> <-- OLHA O ERRO AQUIIIIII
</bean>