当前位置: 首页 > 知识库问答 >
问题:

获取数据时奇怪的HQL查询行为

蒙胤
2023-03-14

我调用下面的方法来计算一些值。我提供agencyID和月份的整数表示来执行计算。

Map jan = new HashMap();
        String a[] =  shifts.getAgencyActiveAgentsByMonth(agencyID, 1).split(",");
        jan.put("label", "Jan");
        jan.put("active", a[0]);
        jan.put("inactive", a[1]);
    activeInactiveGraphData.add(jan);
    Map feb = new HashMap();
        a =  shifts.getAgencyActiveAgentsByMonth(agencyID, 2).split(",");
        feb.put("label", "Feb");
        feb.put("active", a[0]);
        feb.put("inactive", a[1]);
    activeInactiveGraphData.add(feb);

等等...直到我到达12月(值12)。然而,当我到达5月(月值5)时,代码给出了一个运行时错误。然而,奇怪的是这个错误被抛出

java.sql.SQLException: Column 'shift_dayid' not found.

在我的查询中,我没有在查询中的任何位置包含shift\u dayId,如下所示:

@Query(value = "select distinct userid from shift_days where agencyid = :agencyID and month(created_at) = :givenMonth and shift_status = 1", nativeQuery=true)
List<ShiftDaysModel> getAgencyActiveAgentsCountForMonth(@Param("agencyID") String agencyID, @Param("givenMonth") int givenMonth);

我恳请帮助我确定为什么givenMonth在值大于4时抛出运行时异常。

谢谢你

编辑

这是我要求的ShiftDaysModel。。。

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

/**
 *
 * @author Javalove
 */
@Entity
@Getter
@Setter
@NoArgsConstructor
@Table(name = "shift_days")
public class ShiftDaysModel implements Serializable {
    
    public static enum RequestStatus {
        PENDING, ACCEPTED, COMPLETED, REJECTED, TRANSFERED, IN_PROGRESS, VALIDATED;
    }
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long shiftDayID;
    
    @Column(name = "created_at", updatable=false)
    @CreationTimestamp
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    private Date createdAt;
    
    @Column(name = "updated_at")
    @UpdateTimestamp
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    private Date updatedAt;
    
   
    @Column(name = "userID")
    private String userID;
    
    @Column(name = "agencyID")
    private String agencyID;
    
    @Basic
    @Column(name = "shiftDate")
    private LocalDate shiftDate;
    
    @Basic
    @Column(name = "startTime")
    private LocalTime startTime;
    
    @Basic
    @Column(name = "endTime")
    private LocalTime endTime;
    
    @Column(name = "shiftOptionID")
    private String shiftOptionID;
    
    @Column(name = "shiftStatus")
    private RequestStatus shiftStatus;
    
    @Column(name = "isTransferred")
    private boolean isTransferred;
    
    @Column(name = "transferredFromID")
    private String transferredFromID;
    
    @Column(name = "shiftID")
    private String shiftID;

    @Column(name = "shiftRate")
    private Double shiftRate;
    
    @Column(name = "siteID")
    private String siteID;

    @Basic
    @Column(name = "actualStartDateTime")
    private LocalDateTime actualStartDateTime;
    
    @Basic
    @Column(name = "actualEndDateTime")
    private LocalDateTime actualEndDateTime;
    
    @Column(name = "shiftRequestGroupID")
    private String shiftGroupID = "0";
}

共有1个答案

习哲彦
2023-03-14

当您使用签名时:

@Query(..)
List<ShiftDaysModel> getAgencyActiveAgentsCountForMonth(...);

预期select子句将包含创建实体ShiftDaysModel所需的所有字段。

在您的例子中,查询只选择列userid。当Hibernate/Spring试图将每一行转换为一个ShiftDaysModel时,它会抛出异常,因为对应于shift\u dayid的字段没有值。

如果您将查询更改为从shift\u days中选择distinct*,这可能会起作用…

或者,如果您只关心用户ID:

@Query(..)
List<String> getAgencyActiveAgentsCountForMonth(...)
 类似资料:
  • 我已经在这个问题上绞尽脑汁好几天了,我正在使用google sheets表单中的查询功能来提取数据的子集,但是查询是有效的,如果我在特定的几个字段中添加一个值,查询结果都是不可靠的(技术术语)。公式如下: 但是,如果我在P列(这些屏幕截图中的第5列)中添加另一个值,我会得到一些奇怪的行为: 数据本身是零星的,因为并非所有字段都将被填充,所以我的where子句只提取not空值。这些值也是数字和文本的

  • 问题内容: 我想在加载了感谢的场景中找到VBox节点,但出现以下异常: 代码 : fxml文件: 我想知道: 1.为什么查找方法返回a 而不是a ? 2.我怎样才能得到另一种方式? 提前致谢 问题答案: SplitPane将所有项目放在单独的堆栈窗格中(用表示)。出于未知原因,FXMLLoader为它们分配与root子代相同的ID。您可以通过下一个实用程序方法获得所需的VBox: } 并以其他方式

  • 当标题[currSlotNo]的值为空时,该行将导致错误: } HomeVu1.VdslotService updVideoSlotData pictureInst:331 Picid[currSlotNo]:331 HomeVu1.VdslotService updVideoSlotData Picmk:331 HomeVu1.VdslotService updVideoSlotData aud

  • 使用执行hql查询时出现错误 我的疑问是 堆栈跟踪是

  • 我想这样写一个hql 因为我是新手,请帮帮我

  • 问题内容: 如果我在SQL Server Express 2008上运行此查询: 它将日期存储为2011年4月11日 我该如何预防呢? 问题答案: 使用ISO-8601格式:(或)-无论您使用哪种SQL Server语言和区域设置,它始终有效。 SQL Server中的日期 不 以任何特定的面向字符串的格式存储-日期即是日期即是日期,无论您看到什么。 您会看到日期的字符串表示形式-但又一次:日期