Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用count()时命名参数中出现JPA错误_Java_Mysql_Jpa - Fatal编程技术网

Java 使用count()时命名参数中出现JPA错误

Java 使用count()时命名参数中出现JPA错误,java,mysql,jpa,Java,Mysql,Jpa,您好,我在mysql中有一个简单的表: +---------------------------------+---------+------+-----+---------+----------------+ |字段|类型|空|键|默认|额外| +---------------------------------+---------+------+-----+---------+----------------+ |id_documento_referencea_importa | int(1

您好,我在mysql中有一个简单的表:

+---------------------------------+---------+------+-----+---------+----------------+
|字段|类型|空|键|默认|额外|
+---------------------------------+---------+------+-----+---------+----------------+
|id_documento_referencea_importa | int(11)| NO | PRI | NULL |自动增量|
|id|tipo|u documento|int(11)| NO | MUL | NULL ||
|tipo | char(1)| NO | MUL | NULL ||
|id|tipo|u documento|u origen|int(11)| NO | MUL | NULL ||
|文件原件(1)|是|多|空||
|文件原件(1)|是|多|空||
+---------------------------------+---------+------+-----+---------+----------------+
该实体:

public类documentoreferenceiaimporta实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@基本(可选=假)
@列(name=“id\u documento\u referencea\u importa”)
私有整数IDDocumentoreReferenceImporta;
@基本(可选=假)
@NotNull
@列(name=“tipo”)
私人茶桋;
@JoinColumn(name=“estado\u documento\u origen\u despues”,referencedColumnName=“estado\u documento”)
@许多酮
私人房地产文件;房地产文件;
@JoinColumn(name=“estado\u documento\u origen\u antes”,referencedColumnName=“estado\u documento”)
@许多酮
私人地产文件地产文件原居民;
@JoinColumn(name=“id\u tipo\u documento\u origen”,referencedColumnName=“id\u tipo\u documento”)
@多通(可选=假)
私人TipoDocumento idTipoDocumentoOrigen;
@JoinColumn(name=“id\u tipo\u documento”,referencedColumnName=“id\u tipo\u documento”)
@多通(可选=假)
私人TipoDocumento idTipoDocumento;
[…剪断…]
该表引用另一个表id_tipo_documento,这是一个简单的id名称表。 在代码的某个地方,我有一个JPA查询,它工作得很好:

String jpql=“从文档中选择o引用导入o”
+“其中o.idTipoDocumentoOrigen.idTipoDocumento=:idTipoDocumento”
+“和o.idTipoDocumentoOrigen.idTipoDocumento=:idTipoDocumento2”
+“和o.tipo=:tipo”;
Query Query=em.createQuery(jpql,documentoreferenceiaimporta.class);
setParameter(“idTipoDocumento”,102);
setParameter(“idTipoDocumento2”,103);
setParameter(“tipo”,R');
getResultList();
在另一个函数中,我需要统计记录,因此我需要:

String jpql=“从文档中选择计数(o)引用导入o”
+“其中o.idTipoDocumentoOrigen.idTipoDocumento=:idTipoDocumento”
+“和o.idTipoDocumentoOrigen.idTipoDocumento=:idTipoDocumento2”
+“和o.tipo=:tipo”;
Query Query=em.createQuery(jpql,documentoreferenceiaimporta.class);
setParameter(“idTipoDocumento”,102);
setParameter(“idTipoDocumento2”,103);
setParameter(“tipo”,R');
getResultList();
int count=((整数)q.getSingleResult()).intValue();
相反,此查询会给我一个错误,如:

java.lang.IllegalStateException:在查询执行期间提供的参数列表中未找到查询参数IDTIPOdocument2。
此外,每个应用程序部署都会导致不同的错误:有时导致错误的参数是idtipodocument2,有时是idTipoDocumento,有时是tipo。 我做错了什么,或者JPA计数有问题


谢谢!

也许还有其他问题,但至少有以下问题:

以下内容永远不会为真,因为值不能同时为102和103

o.idTipoDocumentoOrigen.idTipoDocumento = :idTipoDocumento //parameter 102
AND o.idTipoDocumentoOrigen.idTipoDocumento = :idTipoDocumento2 //parameter 103
JPQL中的COUNT函数返回Long。这就是为什么createQuery的第二个参数应该是Long.class

Query query = em.createQuery(jpql, Long.class);

您拥有的一切看起来都很好,可能是COUNT和JPA有问题。我通常不会在查询中使用COUNT。我会用o替换COUNT(o),然后执行query.getResultList().size()以获取计数谢谢您的回复。实际上我正在这样做,但我当然更喜欢使用COUNT来提高性能。啊,是的,这是真的。嗯“从表o中选择计数(o)”;在mysql中不适用,我必须执行“从表o中选择计数(*)”;这不是mysql本机查询,而是JPA查询。是的,你说得对,但这是源代码中的复制粘贴问题。无论如何,如果计数查询中的where不为真,则应返回0,而不是抛出错误:)