Mapear view sem id no hibernate

2 respostas
jj_df

Galera, eu tô com um problema e já tentei resolver de várias maneiras de acordo com os posts aqui do guj e mais coisas encontradas no grande oráculo(google) mas nada resolve meu problema.

Quero mapear uma view no hibernate e ela não tem um id nem um campo que seja chave primária.

Acho que estou perto da solução mas ainda tem algo errado. Criei a view com um campo que pode ser a id, numerando a linhas do Resul Set.

Código da View no SQLServer 2008
SELECT     ROW_NUMBER() OVER (ORDER BY idEstacao) AS id, *
FROM         (SELECT     c.idEstacao, 'Cota 2 leituras' AS TipoRegistro, min(c.data) AS Inicio, max(c.data) AS Fim
                       FROM          cota c INNER JOIN
                                              nivelConsistencia n ON c.idNivelConsistencia = n.idNivelConsistencia
                       GROUP BY c.idEstacao, n.nivelConsistencia
                       UNION
                       SELECT     c.idEstacao, 'Cota Média' AS TipoRegistro, min(c.data) AS Inicio, max(c.data) AS Fim
                       FROM         cotamedia c INNER JOIN
                                             nivelConsistencia n ON n.idNivelConsistencia = 2
                       GROUP BY c.idEstacao, n.nivelConsistencia) A
Mapeamento da View
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping
        PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="br.gov.ana.Beans.VwEstacaoSerie">
        <id name="id">
            <generator class="native"/>
        </id>
        <property name="idEstacao"/>
        <property name="tipoRegistro"/>
        <property name="inicio"/>
        <property name="fim"/>
    </class>                
</hibernate-mapping>
StackTrace
org.hibernate.exception.SQLGrammarException: could not execute query
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
        at org.hibernate.loader.Loader.doList(Loader.java:2223)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
        at org.hibernate.loader.Loader.list(Loader.java:2099)
        at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
        at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
        at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
        at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
        at br.gov.ana.DAO.Persistencia.lista(Persistencia.java:90)
        at br.gov.ana.BO.Serie.selecionarSerie(Serie.java:14)
        at br.gov.ana.GUI.SelecionarSerie.btAdicionarActionPerformed(SelecionarSerie.java:178)
        at br.gov.ana.GUI.SelecionarSerie.access$000(SelecionarSerie.java:10)
        at br.gov.ana.GUI.SelecionarSerie$2.actionPerformed(SelecionarSerie.java:70)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6216)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5981)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4583)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4413)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2475)
        at java.awt.Component.dispatchEvent(Component.java:4413)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.sql.SQLException: Invalid object name 'VwEstacaoSerie'.
        at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
        at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2816)
        at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2254)
        at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:631)
        at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:477)
        at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:777)
        at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
        at org.hibernate.loader.Loader.doQuery(Loader.java:674)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
        at org.hibernate.loader.Loader.doList(Loader.java:2220)
        ... 37 more

Vlw pela força, e é essa força que faz a comunidade JAVA ser o que é!!!

2 Respostas

jj_df

Alguém tem alguma dica pra trabalhar com views no Hibernate???

jj_df

Valeu galera, resolvi com a maneira mais simples do mundo. Segue o mapeamento da view.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping
        PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="br.gov.ana.Beans.VwEstacaoSerie" table="vw_EstacaoSerie">
        <id name="id">
            <generator class="assigned"/>
        </id>
        <property name="idEstacao"/>
        <property name="tipoRegistro"/>
        <property name="inicio"/>
        <property name="fim"/>
    </class>
</hibernate-mapping>
Criado 27 de maio de 2009
Ultima resposta 28 de mai. de 2009
Respostas 2
Participantes 1