您好,我有mysql的這個簡單的表:JPA錯誤命名參數wher使用count()
+---------------------------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------------------+---------+------+-----+---------+----------------+
| id_documento_referencia_importa | int(11) | NO | PRI | NULL | auto_increment |
| id_tipo_documento | int(11) | NO | MUL | NULL | |
| tipo | char(1) | NO | MUL | NULL | |
| id_tipo_documento_origen | int(11) | NO | MUL | NULL | |
| estado_documento_origen_antes | char(1) | YES | MUL | NULL | |
| estado_documento_origen_despues | char(1) | YES | MUL | NULL | |
+---------------------------------+---------+------+-----+---------+----------------+
這個實體:
public class DocumentoReferenciaImporta implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id_documento_referencia_importa")
private Integer idDocumentoReferenciaImporta;
@Basic(optional = false)
@NotNull
@Column(name = "tipo")
private char tipo;
@JoinColumn(name = "estado_documento_origen_despues", referencedColumnName = "estado_documento")
@ManyToOne
private EstadoDocumento estadoDocumentoOrigenDespues;
@JoinColumn(name = "estado_documento_origen_antes", referencedColumnName = "estado_documento")
@ManyToOne
private EstadoDocumento estadoDocumentoOrigenAntes;
@JoinColumn(name = "id_tipo_documento_origen", referencedColumnName = "id_tipo_documento")
@ManyToOne(optional = false)
private TipoDocumento idTipoDocumentoOrigen;
@JoinColumn(name = "id_tipo_documento", referencedColumnName = "id_tipo_documento")
@ManyToOne(optional = false)
private TipoDocumento idTipoDocumento;
[...snip...]
表引用另一個表,id_tipo_documento ,這是一個簡單的ID名錶。 某處在我有這樣的JPA查詢的代碼,即可以正常使用:
String jpql="SELECT o FROM DocumentoReferenciaImporta o "
+ "WHERE o.idTipoDocumentoOrigen.idTipoDocumento = :idTipoDocumento "
+ "AND o.idTipoDocumentoOrigen.idTipoDocumento = :idTipoDocumento2 "
+ "AND o.tipo = :tipo";
Query query = em.createQuery(jpql, DocumentoReferenciaImporta.class);
query.setParameter("idTipoDocumento",102);
query.setParameter("idTipoDocumento2", 103);
query.setParameter("tipo",'R');
query.getResultList();
在另一個函數我需要統計的記錄,所以我做的:
String jpql="SELECT COUNT(o) FROM DocumentoReferenciaImporta o "
+ "WHERE o.idTipoDocumentoOrigen.idTipoDocumento = :idTipoDocumento "
+ "AND o.idTipoDocumentoOrigen.idTipoDocumento = :idTipoDocumento2 "
+ "AND o.tipo = :tipo";
Query query = em.createQuery(jpql, DocumentoReferenciaImporta.class);
query.setParameter("idTipoDocumento",102);
query.setParameter("idTipoDocumento2", 103);
query.setParameter("tipo",'R');
query.getResultList();
int count = ((Integer)q.getSingleResult()).intValue();
此查詢,相反,給我的錯誤,如:
java.lang.IllegalStateException: Query argument idTipoDocumento2 not found in the list of parameters provided during query execution.
此外,在不同的錯誤每個應用程序部署的結果是:有時會導致錯誤的說法是idTipoDocumento2,有時s是idTipoDocumento,有時是tipo。 我做錯了什麼,或者JPA出現了問題COUNT?
謝謝!
所有你看起來不錯的東西,也許有一個COUNT和JPA的問題。在我的查詢中,我通常不使用COUNT。我將用o替換COUNT(o),然後執行query.getResultList()。size()以獲得計數 –
感謝您的回覆。其實我正在那樣做,但我更喜歡能夠使用計數來表現。 –
啊,那是真的。嗯「從表o選擇計數(o);」在mysql中不起作用,我必須做「從表o選擇計數(*);」 –