你好我想查询的JPA一些数据奇怪的错误,这是我的查询:在JPA查询
@Override
public List<HorarioAtencion> findByPeriodo(Person person, int dia, int mes, int anno) {
Query busqueda = em.createNativeQuery("Select * from HorariosAtencion where " +
"idPerson = ?1 AND "+
"DAY(fechaInicio) <= ?2 AND MONTH(fechaInicio) <= ?3 AND YEAR(fechaInicio) <= ?4 AND "+
"DAY(fechaFin) >= ?2 AND MONTH(fechaFin) >= ?3 AND YEAR(fechaFin) >= ?4 ORDER BY TIME(fechaInicio)", HorarioAtencion.class);
busqueda.setParameter(1,person.getId());
busqueda.setParameter(2, dia);
busqueda.setParameter(3, mes);
busqueda.setParameter(4, anno);
return busqueda.getResultList();
}
该查询返回的结果,但下一个异常被触发:
Caused by: Exception [EclipseLink-6044] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.QueryException
Exception Description: The primary key read from the row [ArrayRecord(
=> 1
=> 13
=> 2013-01-04 12:25:00.0
=> 2013-01-04 12:25:00.0
=> true
=> true
=> true
=> true
=> true
=> true
=> true)] during the execution of the query was detected to be null. Primary keys must not contain null.
Query: ReadAllQuery(referenceClass=HorarioAtencion sql="Select * from HorariosAtencion where idPerson = ? AND DAY(fechaInicio) <= ? AND MONTH(fechaInicio) <= ? AND YEAR(fechaInicio) <= ? AND DAY(fechaFin) >= ? AND MONTH(fechaFin) >= ? AND YEAR(fechaFin) >= ? ORDER BY TIME(fechaInicio)")
我不知道什么可能是问题:/
UPDATE:
对实体类列定义:
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@Column(name = "fechaInicio")
@Temporal(TemporalType.TIMESTAMP)
private Date fechaInicio;
@Basic(optional = false)
@Column(name = "fechaFin")
@Temporal(TemporalType.TIMESTAMP)
private Date fechaFin;
@Basic(optional = false)
@Column(name = "domingo")
private boolean domingo;
@Basic(optional = false)
@Column(name = "lunes")
private boolean lunes;
@Basic(optional = false)
@Column(name = "martes")
private boolean martes;
@Basic(optional = false)
@Column(name = "miercoles")
private boolean miercoles;
@Basic(optional = false)
@Column(name = "jueves")
private boolean jueves;
@Basic(optional = false)
@Column(name = "viernes")
private boolean viernes;
@Basic(optional = false)
@Column(name = "sabado")
private boolean sabado;
@JoinColumn(name = "idPersona", referencedColumnName = "id")
@ManyToOne(optional = false)
private Persona idPersona;
你好!谢谢你的答案,但我的表不包含任何空值 – rafuru
@ rafuru,hm,它很奇怪:在你的查询中你使用了名为'idPerson'的字段,但是在实体类描述中你的字段被称为'idPersona'(见名字中的最后一个'a')。 – Andremoniy