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;
