Problemas ao fazer um select usando JPA!

4 respostas
D

Bom dia,
Comecei a mexer com JPA a pouco tempo e por isso estou tendo alguns problemas... Um deles é fazer o seguinte select:

@NamedQuery(name = "verificarReservaProfessor", query = "select eq.nome,r.bloco,r.sala,r.periodo,r.dataReserva,r.obs from Reserva r inner join Equipamento eq on eq.id_equipamento = r.id_equipamento inner join Professor p on p.id_professor = r.id_professor where r.id_professor = :id")

Segue abaixo as classes:

Classe Reserva:

@Table(name = "Reserva")
@NamedQueries({
    @NamedQuery(name = "verificarReservaProfessor", query = "select eq.nome,r.bloco,r.sala,r.periodo,r.dataReserva,r.obs from Reserva r inner join Equipamento eq on eq.id_equipamento = r.id_equipamento inner join Professor p on p.id_professor = r.id_professor where r.id_professor = :id")
})
@Entity
public class Reserva implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "id_equipamento", insertable = true, updatable = true)
    private Equipamento lEquipamento;
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "id_professor", insertable = true, updatable = true)
    private Professor lProfessor;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataReserva;
    @Column(length = 20, nullable = false)
    private String periodo;
    @Column(length = 20, nullable = false)
    private String bloco;
    @Column(length = 20, nullable = false)
    private String sala;
    @Column(length = 350, nullable = true)
    private String obs;

Classe Professor:

@Table(name = "Professor")
@NamedQueries({
    @NamedQuery(name = "listarProfessores", query = "select p from Professor p order by p.nome")
})
@Entity
public class Professor implements Serializable {

   private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "id_professor")
    private Long id;
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "id")
    private Reserva reserva;
    @Column(nullable = false, length = 150)
    private String nome;
    @Column(nullable = false, length = 8)
    private int matricula;
    @Column(nullable = true, length = 50)
    private String intranet;

Classe Equipamento:

@Table(name = "Equipamento")
@NamedQueries({
    @NamedQuery(name = "verificarDisponibilidade", query = "select e from Equipamento e where e.id not in(select res2.lEquipamento.id from Reserva res2 where res2.dataReserva = :datareserva and res2.periodo = :periodo) and e.nome = :nome"),
    @NamedQuery(name = "listarEquipamentos", query = "select e from Equipamento e order by e.patrimonio,e.nome")
})
@Entity
public class Equipamento implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "id_equipamento")
    private Long id;
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "id")
    private Reserva reserva;
    @Column(nullable = false, length = 100)
    private String nome;
    @Column(nullable = false, length = 50)
    private String marca;
    @Column(nullable = false, length = 50)
    private String modelo;
    @Column(nullable = false, length = 14)
    private int patrimonio;
    @Column(nullable = false, length = 50)
    private String bloco;
    @Column(nullable = false, length = 50)
    private String sala;
E esta dando o seguinte erro: run:
[TopLink Info]: 2009.09.10 10:33:04.075--ServerSession(25934938)--TopLink, version: Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))
Exception occurred during event dispatching:
Local Exception Stack: 
Exception [TOPLINK-8024] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.EJBQLException
Exception Description: Syntax error parsing the query [verificarReservaProfessor: select eq.nome,r.bloco,r.sala,r.periodo,r.dataReserva,r.obs from Reserva r inner join Equipamento eq on eq.id_equipamento = r.id_equipamento inner join Professor p on p.id_professor = r.id_professor where r.id_professor = :id], line 1, column 99: syntax error at [eq].
Internal Exception: line 1:99: expecting DOT, found 'eq'
        at oracle.toplink.essentials.exceptions.EJBQLException.syntaxErrorAt(EJBQLException.java:379)
        at oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.handleANTLRException(EJBQLParser.java:335)
        at oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.addError(EJBQLParser.java:278)
        at oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.reportError(EJBQLParser.java:378)
        at oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.joinAssociationPathExpression(EJBQLParser.java:1909)
        at oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.join(EJBQLParser.java:1768)
        at oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.identificationVariableDeclaration(EJBQLParser.java:1629)
        at oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.fromClause(EJBQLParser.java:454)
        at oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.selectStatement(EJBQLParser.java:179)
        at oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.document(EJBQLParser.java:135)
        at oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.parse(EJBQLParser.java:166)
        at oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.buildParseTree(EJBQLParser.java:127)
        at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:215)
        at oracle.toplink.essentials.queryframework.EJBQLPlaceHolderQuery.processEjbQLQuery(EJBQLPlaceHolderQuery.java:111)
        at oracle.toplink.essentials.internal.sessions.AbstractSession.processEJBQLQueries(AbstractSession.java:2059)
        at oracle.toplink.essentials.internal.sessions.AbstractSession.processEJBQLQueries(AbstractSession.java:2046)
        at oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl.postConnectDatasource(DatabaseSessionImpl.java:724)
        at oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:604)
        at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:280)
        at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:229)
        at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:93)
        at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:126)
        at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:120)
        at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:91)
        at sc.senai.br.persistencias.PersistenceUtil.persist(PersistenceUtil.java:15)
        at sc.senai.br.layout.Layout.cadastrarProfessor(Layout.java:1126)
        at sc.senai.br.layout.Layout.B_CadastrarProfessorActionPerformed(Layout.java:979)
        at sc.senai.br.layout.Layout.access$000(Layout.java:19)
        at sc.senai.br.layout.Layout$1.actionPerformed(Layout.java:166)
        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.pumpEventsForFilter(EventDispatchThread.java:178)
        at java.awt.Dialog$1.run(Dialog.java:1051)
        at java.awt.Dialog$3.run(Dialog.java:1103)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.Dialog.show(Dialog.java:1101)
        at java.awt.Component.show(Component.java:1516)
        at java.awt.Component.setVisible(Component.java:1468)
        at java.awt.Window.setVisible(Window.java:841)
        at java.awt.Dialog.setVisible(Dialog.java:991)
        at sc.senai.br.layout.Layout.Item_CadastrarProfessorActionPerformed(Layout.java:965)
        at sc.senai.br.layout.Layout.access$1100(Layout.java:19)
        at sc.senai.br.layout.Layout$13.actionPerformed(Layout.java:898)
        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.AbstractButton.doClick(AbstractButton.java:357)
        at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1225)
        at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1266)
        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: line 1:99: expecting DOT, found 'eq'
        at persistence.antlr.Parser.match(Parser.java:212)
        at oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.joinAssociationPathExpression(EJBQLParser.java:1901)
        ... 84 more
CONSTRUÍDO COM SUCESSO (tempo total: 9 segundos)

Alguém poderia me da uma luz da onde estou errando? Desde ja meu obrigado.

4 Respostas

josue_carrecon

tem um erro ai na: column 99: syntax error at [eq]. seu Eq, tah sobrando nesse join.

D

Como assim? Tem como ser mais especifico?

H

Bom dia

Na Query:

select eq.nome,r.bloco,r.sala,r.periodo,r.dataReserva,r.obs from Reserva r inner join Equipamento eq on eq.id_equipamento = r.id_equipamento inner join Professor p on p.id_professor = r.id_professor where r.id_professor = :id

tem um ‘eq’ que não está correto…

D

Problema resolvido!
Modifiquei o ID para matricula e ficou assim a consulta nova:

Criado 10 de setembro de 2009
Ultima resposta 14 de set. de 2009
Respostas 4
Participantes 3