当数据库为表中的一列返回空值时如何处理错误

Posted

技术标签:

【中文标题】当数据库为表中的一列返回空值时如何处理错误【英文标题】:How to handle an error when database returns null value for one of the columns in the table 【发布时间】:2021-10-16 02:39:45 【问题描述】:

我正在使用 Java 和带有 JPQL 的 Spring Boot 来访问数据。

我收到以下错误,因为数据库中的 hourlyRate 为空:

原因:org.hibernate.QueryException:无法实例化类 [com.example.model.response.school.Employee] 来自元组。

我仍然希望能够从数据库中获取数据,即使该列在数据库中具有空值并将响应作为空值发送而不是出现错误。我该如何处理?

这里是 POJO:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Employee
   
   private String firstName;
   private String lastName;
   private float hourlyRate;

这是 DAO:

@Entity
@Table(name = "EMPLOYEE")
public class Employee implements java.io.Serializable 
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "EMPLOYEE_ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer employeeId;

    @Column(name = "FIRST_NAME")
    private String firstName;
    
    @Column(name = "LAST_NAME")
    private String lastName;
    
    @Column(name = "HOURLY_RATE")
    private float hourlyRate;

这是 JPQL:

@Query("SELECT new com.example.model.response.school.Employee(e.firstName, e.lastName, e.hourlyRate FROM Employee e \n" +
  " WHERE e.employeeId = :employeeId")
Employee getEmployeeDetails(@Param("employeeId") int employeeId);

【问题讨论】:

试试三元运算符? & : You miss ) before from. 【参考方案1】:

如果值可以在语义上为空(未定义),那么您应该使用Float(或者可能是BigDecimal)来保存它,因为它们可以表示空。如果它不能正确地为空,你的列应该定义为NOT NULL。不要试图做一个神奇的映射;相反,请确保“正确”的定义在您的代码和架构中是相同的。

【讨论】:

以上是关于当数据库为表中的一列返回空值时如何处理错误的主要内容,如果未能解决你的问题,请参考以下文章

[当PHP代码失败但发送200时如何处理AJAX?

在flask中提交数据时如何处理错误

处理包/模块中的错误时如何处理Python异常

在 log4j2 jdbcapender 中设置日期时如何处理 null?

当 RabbitMQ 交换不存在时如何处理错误(并且消息通过消息传递网关接口发送)

离开页面时如何处理jQuery ajax发布错误