java – JPA查询的奇怪错误
发布时间:2020-12-15 05:20:49 所属栏目:Java 来源:网络整理
导读:嗨,我正在尝试查询JPA上的一些数据,这是我的查询: @Override public ListHorarioAtencion findByPeriodo(Person person,int dia,int mes,int anno) { Query busqueda = em.createNativeQuery("Select * from HorariosAtencion where " + "idPerson = ?1 AND
嗨,我正在尝试查询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)") 我不知道可能是什么问题:/ 更新: 实体类的列定义: 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; 解决方法
您使用的是什么数据库,以及它为列名返回什么?
默认情况下,EclipseLink在较新版本中区分大小写,除非eclipselink.jpa.uppercase-column-names persistent属性设置为true. 如果数据库在将列名称定义为小写“id”时将列名称返回为大写“ID”,则这可能是本机查询的问题. 尝试更改注释中的列定义以匹配数据库使用的列定义,或者将属性添加为值true. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |