[英]How to handle nullPointer in Spring Data JPA projections
如果有一种自定义方法来处理投影创建期间发生的 null 或任何其他异常,是否有任何想法?
在下面的 JPQL 查询中,我试图编写一个自定义对象,但是当 updatedBy 列下没有数据时(它在数据库中为 null) - 然后它内部失败,因为无法进一步处理 null 对象(getUpdatedBy -> getProfile -> getName )。
@Query("select new john.home.com.demo.repository.projections.AgreementType(agreement.name, " +
"agreement.type, " +
"agreement.audit.createdBy.profile.name, " +
"agreement.audit.updateDate, " +
"agreement.audit.updatedBy.profile.name) from Agreement agreement")
List<AgreementType> findAgreementTypes();
这是我的实体:
协议:
@Setter
@Getter
@NoArgsConstructor
@Entity
@Table(name = "AGREEMENT")
public class Agreement {
@Id
@Column(name = "AGREEMENT_ID")
private Long id;
@Column(name = "NAME")
private String name;
@Column(name = "TYPE")
private String type;
@Embedded
Audit audit;
嵌入式审计
@Getter
@Setter
@Embeddable
public class Audit {
@OneToOne
@JoinColumn(name = "CREATED_BY")
private SystemProcess createdBy;
@Column(name = "CREATION_DATE")
private LocalDate creationDate;
@Column(name = "UPDATE_DATE")
private LocalDate updateDate;
@OneToOne
@JoinColumn(name = "UPDATED_BY")
private SystemProcess updatedBy;
系统流程:
@Getter
@Setter
@Entity
@Table(name = "sys_process")
public class SystemProcess {
@Id
@Column(name = "PROCESS_ID")
private Integer id;
@Column(name = "PROCESS_MSG_TXT")
private String messageText;
@OneToOne
@JoinColumn(name = "PROFILE_ID")
private SystemProfile profile;
系统简介:
@Getter
@Setter
@Entity
@Table(name = "sys_profile")
public class SystemProfile {
@Id
@Column(name = "PROFILE_ID")
private Integer id;
@Column(name = "PROFILE_NM")
private String name;
}
这是我使用的 JPQL 查询,但由于未知原因它不起作用
@Query("select new dan.home.pl.demo.repository.projections.AgreementType(" +
"agreement.name, " +
"agreement.audit.createdBy.profile.name, " +
"case when (agreement.audit.updatedBy is null) then 'Dummy Name' else agreement.audit.updatedBy.profile.name end" +
") from Agreement agreement")
List<AgreementType> findAgreementTypes();
您可以使用 case 语句来实现这里检查文档https://docs.jboss.org/hibernate/orm/4.3/devguide/en-US/html/ch11.html
就像是
case when agreement.audit is not null then agreement.audit.updatedBy.profile.name end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.