Grails + Oracle (View)
16/09/2009 00:00
0
Olá estou começando a trabalhar com o Grails + Oracle. Gostaria de saber se consigo criar um model baseado numa view que tenho no Oracle salientando que uma view não é uma tabela.
Aguardo retorno.
Tags: Grails


0
Sim, você pode.

Se a sua view tiver o mesmo nome que sua classe de domínio, então não precisa fazar absolutamente nada.
Caso contrário, você terá de fazer um mapeamento customizado dentro da sua classe de domínio, tal como neste link:
<!-- m --><a class="postlink" href="http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20(GORM">http://grails.org/doc/latest/guide/5.%2 ... ng%20(GORM</a><!-- m -->).html#5.5.2 Custom ORM Mapping

Eu já fiz isto demais, e é bem tranquilo.

Porém... (sempre há um porém).
Se você poderá enviar dados para o seu banco de dados ou não, vai depender do fato da sua view permitir isto ou não, o que irá depender muito de SGBD para SGBD.


0
Outra dúvida, não sou obrigado a mapear todos os campos da view?
21/09/2009 00:00


0
Não, apenas os campos que interessam á sua classe de domínio. <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->


0
eu montei a classe de dominio de um View


class Vendor {

String vendorSiteCode
String cnpj
Integer orgId
String vendorName
String phoneNumber

static mapping = {
table 'EBS_VENDORS_V'
id column&#58; 'VENDOR_SITE_ID'
vendorSiteCode column&#58; 'VENDOR_SITE_CODE'
cnpj column&#58; 'CNPJ'
orgId column&#58; 'ORG_ID'
vendorName column&#58; 'VENDOR_NAME'
phoneNumber column&#58; 'PHONE_NUMBER'
}

static constraints = {
}
}


mas ao fazer o código

Vendor.findByVendorName(&quot;TESTE&quot;);


Apresenta esse erro

groovy> Vendor.findByVendorName(&quot;DOMINGAS A. LUCINDO&quot;);

Exception thrown&#58; could not execute query; nested exception is org.hibernate.exception.SQLGrammarException&#58; could not execute query

org.springframework.dao.InvalidDataAccessResourceUsageException&#58; could not execute query; nested exception is org.hibernate.exception.SQLGrammarException&#58; could not execute query

at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java&#58;630)

at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java&#58;412)

at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java&#58;424)

at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java&#58;339)

at ConsoleScript0.run(ConsoleScript0&#58;1)

Caused by&#58; org.hibernate.exception.SQLGrammarException&#58; could not execute query

at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java&#58;90)

at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java&#58;66)

at org.hibernate.loader.Loader.doList(Loader.java&#58;2231)

at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java&#58;2125)

at org.hibernate.loader.Loader.list(Loader.java&#58;2120)

at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java&#58;118)

at org.hibernate.impl.SessionImpl.list(SessionImpl.java&#58;1596)

at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java&#58;306)

at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java&#58;328)

at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java&#58;419)

... 2 more

Caused by&#58; java.sql.SQLSyntaxErrorException&#58; ORA-00904&#58; nome inválido de coluna


at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java&#58;91)

at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java&#58;133)

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java&#58;206)

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java&#58;455)

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java&#58;413)

at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java&#58;1034)

at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java&#58;194)

at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java&#58;791)

at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java&#58;866)

at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java&#58;1186)

at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java&#58;3387)

at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java&#58;3431)

at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java&#58;1491)

at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java&#58;92)

at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java&#58;208)

at org.hibernate.loader.Loader.getResultSet(Loader.java&#58;1808)

at org.hibernate.loader.Loader.doQuery(Loader.java&#58;697)

at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java&#58;259)

at org.hibernate.loader.Loader.doList(Loader.java&#58;2228)



O que faço?
21/09/2009 00:00


0
Da uma olhada nesta linha do seu stacktrace:


Caused by: java.sql.SQLSyntaxErrorException: ORA-00904: nome inválido de coluna

Provavelmente alguma das colunas que você mapeou estaá com o nome errado.


0
eu descobri... é que tinha de desabilitar o version...
coloquei assim:


static mapping = {
....
version false
}
21/09/2009 00:00


0
Bem lembrado! Já cometi DEMAIS este erro e, como pode ver agora, inclusive com você ao esquecer deste detalhe! <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto