table 中的一列的数据库 returns 为空值时如何处理错误
How to handle an error when database returns null value for one of the columns in the table
我正在使用 Java 和 Spring 使用 JPQL 启动来访问数据。
我收到以下错误,因为数据库中的 hourlyRate 为空:
Caused by: org.hibernate.QueryException: could not instantiate class
[com.example.model.response.school.Employee] from tuple.
即使该列在数据库中具有空值,我仍然希望能够从数据库中获取数据,并将响应作为空值发送,而不是收到错误。我该如何处理?
这是 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);
如果该值在语义上可以为 null(未定义),那么您应该使用 Float
(或者可能是 BigDecimal
)来保存它,因为它们可以表示 null。如果它不能正确地为 null,则您的列应该定义为 NOT NULL
。不要试图做一个神奇的映射;相反,请确保“正确”的定义在您的代码和架构中是相同的。
我正在使用 Java 和 Spring 使用 JPQL 启动来访问数据。
我收到以下错误,因为数据库中的 hourlyRate 为空:
Caused by: org.hibernate.QueryException: could not instantiate class [com.example.model.response.school.Employee] from tuple.
即使该列在数据库中具有空值,我仍然希望能够从数据库中获取数据,并将响应作为空值发送,而不是收到错误。我该如何处理?
这是 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);
如果该值在语义上可以为 null(未定义),那么您应该使用 Float
(或者可能是 BigDecimal
)来保存它,因为它们可以表示 null。如果它不能正确地为 null,则您的列应该定义为 NOT NULL
。不要试图做一个神奇的映射;相反,请确保“正确”的定义在您的代码和架构中是相同的。