[RESOLVIDO] EJB Derby @NamedQuery(name = "Produtos.findByVndaPrdt" javax.ejb.EJBException

1 resposta
wfrsilva

Bom dia amigos.
Possuo a classe Produtos e o atributo vndaPrdt .
Resumidamente estou tentando usar a seguinte NamedQuery:

@NamedQuery(name = "Produtos.findByVndaPrdt", query = "SELECT p FROM Produtos p WHERE p.vndaPrdt = :vndaPrdt"),

A mesma corresponde ao seguinte atributo:

@Column(name = "VNDA_PRDT")
//    private Serializable vndaPrdt;
    private boolean vndaPrdt;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 25)

Meu DB Derby importei do Postgre, e somente assim para ele aceitar o campo vnda_prdt como booleano.

CREATE TABLE produtos
(
  codg_prdt integer NOT NULL,
  vnda_prdt boolean, -- produto esta a venda?
  dono_prdt character varying(30) NOT NULL,
  nome_prdt character varying(25) NOT NULL,
  desc_prdt character varying(60),
  vlor_prdt numeric(10,0),
  CONSTRAINT produtos_pkey PRIMARY KEY (codg_prdt ),
  CONSTRAINT produtos_dono_prdt_fkey FOREIGN KEY (dono_prdt)
      REFERENCES usuarios (usuario) 
)

tanto que meu codigos de inserir produtos funcionaram sem problemas

insert into produtos (codg_prdt, vnda_prdt, dono_prdt, nome_prdt, desc_prdt, vlor_prdt) values (1, true, 'tu','produto 01', 'descricao produto 01', 100);
insert into produtos (codg_prdt, vnda_prdt, dono_prdt, nome_prdt, desc_prdt, vlor_prdt) values (2, false, 'ele','produto 02', 'descricao produto 02', 200);
insert into produtos (codg_prdt, vnda_prdt, dono_prdt, nome_prdt, desc_prdt, vlor_prdt) values (3, true, 'eu','produto 03', 'descricao produto 03', 300);
insert into produtos (codg_prdt, vnda_prdt, dono_prdt, nome_prdt, desc_prdt, vlor_prdt) values (4, false, 'eu','produto 04', 'descricao produto 04', 400);
insert into produtos (codg_prdt, vnda_prdt, dono_prdt, nome_prdt, desc_prdt, vlor_prdt) values (5, true, 'eu','produto 03', 'descricao produto 05', 500);

Print derby:

url print derby:
https://lh4.googleusercontent.com/ripz1vkCBF2jiJ8e2ZTsSxKvWalPWiWP_JA7VmKsqBAt8L6cFo1xiaApP3H6dhz8FLxyG4RK3iQ
No meu Bean o seguinte metodo fuciona perfeitamente:

public List<ejb.Produtos> getListaProdutos() {
        Query query = em.createNamedQuery("Produtos.findAll");
        return query.getResultList();
    }//getListaProdutos

E estou tentando fazer esse funcionar:

public List<ejb.Produtos> getListaProdutosAVenda() {
        Query query = em.createNamedQuery("Produtos.findByVndaPrdt").setParameter("vndaPrdt", true);
        return query.getResultList();
    }

Mas ocorre o seguinte erro:

Advertência: EJB5184:A system exception occurred during an invocation on EJB AMLFachada, method: public java.util.List ejb.AMLFachada.getListaProdutosAVenda()
Advertência: javax.ejb.EJBException
	at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5215)
	at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5113)
	at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4901)
	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2045)
	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1994)
	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222)
	at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
	at $Proxy297.getListaProdutosAVenda(Unknown Source)
	at ejb.AMLMBean.getListaProdutosAVenda(AMLMBean.java:60)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:363)
	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:138)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:183)
	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224)
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
	at javax.faces.component.UIData.getValue(UIData.java:731)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at com.sun.faces.facelets.util.DevTools.writeAttributes(DevTools.java:375)
	at com.sun.faces.facelets.util.DevTools.writeStart(DevTools.java:424)
	at com.sun.faces.facelets.util.DevTools.writeComponent(DevTools.java:245)
	at com.sun.faces.facelets.util.DevTools.writeComponent(DevTools.java:264)
	at com.sun.faces.facelets.util.DevTools.writeComponent(DevTools.java:264)
	at com.sun.faces.facelets.util.DevTools.writeComponent(DevTools.java:264)
	at com.sun.faces.facelets.util.DevTools.writeComponent(DevTools.java:264)
	at com.sun.faces.facelets.util.DevTools.writeComponent(DevTools.java:264)
	at com.sun.faces.facelets.util.DevTools.debugHtml(DevTools.java:128)
	at com.sun.faces.renderkit.RenderKitUtils.renderHtmlErrorPage(RenderKitUtils.java:1162)
	at com.sun.faces.context.ExceptionHandlerImpl.throwIt(ExceptionHandlerImpl.java:276)
	at com.sun.faces.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:142)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:722)
Caused by: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: Não são suportadas comparações entre 'BOOLEAN' e 'SMALLINT'.
Error Code: -1
Call: SELECT CODG_PRDT, DESC_PRDT, VLOR_PRDT, NOME_PRDT, VNDA_PRDT, DONO_PRDT FROM PRODUTOS WHERE (VNDA_PRDT = CAST (? AS SMALLINT ))
	bind => [true]
Query: ReportQuery(ejb.Produtos)
	at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:319)
	at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:566)
	at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:452)
	at oracle.toplink.essentials.threetier.ServerSession.executeCall(ServerSession.java:473)
	at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228)
	at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:214)
	at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:285)
	at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:615)
	at oracle.toplink.essentials.internal.queryframework.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2416)
	at oracle.toplink.essentials.internal.queryframework.ExpressionQueryMechanism.selectAllReportQueryRows(ExpressionQueryMechanism.java:2382)
	at oracle.toplink.essentials.queryframework.ReportQuery.executeDatabaseQuery(ReportQuery.java:802)
	at oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQuery.java:628)
	at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:692)
	at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:746)
	at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2233)
	at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:952)
	at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:924)
	at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:367)
	at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.getResultList(EJBQueryImpl.java:478)
	at ejb.AMLFachada.getListaProdutosAVenda(AMLFachada.java:47)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
	at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
	at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5388)
	at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
	at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
	at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5360)
	at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5348)
	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
	... 60 more
Caused by: java.sql.SQLSyntaxErrorException: Não são suportadas comparações entre 'BOOLEAN' e 'SMALLINT'.
	at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
	at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
	at org.apache.derby.client.am.Connection.prepareStatement(Unknown Source)
	at com.sun.gjc.spi.base.ConnectionHolder.prepareStatement(ConnectionHolder.java:502)
	at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1162)
	at oracle.toplink.essentials.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:612)
	at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:485)
	... 100 more
Caused by: org.apache.derby.client.am.SqlException: Não são suportadas comparações entre 'BOOLEAN' e 'SMALLINT'.
	at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source)
	at org.apache.derby.client.net.NetStatementReply.parsePrepareError(Unknown Source)
	at org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(Unknown Source)
	at org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(Unknown Source)
	at org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(Unknown Source)
	at org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(Unknown Source)
	at org.apache.derby.client.am.Statement.readPrepareDescribeOutput(Unknown Source)
	at org.apache.derby.client.am.PreparedStatement.readPrepareDescribeInputOutput(Unknown Source)
	at org.apache.derby.client.am.PreparedStatement.flowPrepareDescribeInputOutput(Unknown Source)
	at org.apache.derby.client.am.PreparedStatement.prepare(Unknown Source)
	at org.apache.derby.client.am.Connection.prepareStatementX(Unknown Source)
	... 105 more

É por causa do booleano ou meu NamedQuery não esta configurado corretamente?

@Entity
@Table(name = "PRODUTOS")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Produtos.findAll", query = "SELECT p FROM Produtos p"),
    @NamedQuery(name = "Produtos.findByCodgPrdt", query = "SELECT p FROM Produtos p WHERE p.codgPrdt = :codgPrdt"),
    @NamedQuery(name = "Produtos.findByVndaPrdt", query = "SELECT p FROM Produtos p WHERE p.vndaPrdt = :vndaPrdt"),
    @NamedQuery(name = "Produtos.findVndaPrdtTrue", query = "SELECT p FROM Produtos p WHERE p.vndaPrdt = true"),
    @NamedQuery(name = "Produtos.findByNomePrdt", query = "SELECT p FROM Produtos p WHERE p.nomePrdt = :nomePrdt"),
    @NamedQuery(name = "Produtos.findByDescPrdt", query = "SELECT p FROM Produtos p WHERE p.descPrdt = :descPrdt"),
    @NamedQuery(name = "Produtos.findByVlorPrdt", query = "SELECT p FROM Produtos p WHERE p.vlorPrdt = :vlorPrdt")})
public class Produtos implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "CODG_PRDT")
    private Integer codgPrdt;
    @Column(name = "VNDA_PRDT")
//    private Serializable vndaPrdt;
    private boolean vndaPrdt;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 25)
    @Column(name = "NOME_PRDT")
    private String nomePrdt;
    @Size(max = 60)
    @Column(name = "DESC_PRDT")
    private String descPrdt;
    @Column(name = "VLOR_PRDT")
    private Long vlorPrdt;
    @OneToMany(mappedBy = "codgPrdt")
    private Collection<Compravenda> compravendaCollection;
    @JoinColumn(name = "DONO_PRDT", referencedColumnName = "USUARIO")
    @ManyToOne(optional = false)
    private Usuarios donoPrdt;


1 Resposta

wfrsilva

Realmente foi só trocar as configurações da classe de boolean para int:

@Column(name = "CODG_PRDT")
    private Integer codgPrdt;
    @Column(name = "VNDA_PRDT")
//    private Serializable vndaPrdt;
    private int vndaPrdt;
    @Basic(optional = false)

E converter a coluna do Berdy para Smallint, funcionou. Sem boolean!!

Criado 17 de junho de 2012
Ultima resposta 18 de jun. de 2012
Respostas 1
Participantes 1