如何在 JPA 中使用 Null 值从实体转换为 dto

Hwo can I convert from entity to dto with Null value in JPA

这是我的服务class。

public AnswerDetailResponse addAnswerByQuestionId(Long id, WriteAnswerRequest request) {

    Post post = request.toEntity();
    post.createAnswer(id);
    
    questionRepository.save(post);

    return AnswerDetailResponse.fromEntity(post);
}

这是我的 WriteAnswerRequest 的 fromEntity 方法 class

@ApiModel
@Data
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class AnswerDetailResponse {

    private long questionId;
    private long answerId;
    private String body;
    private int score;
    ...
}

public static AnswerDetailResponse fromEntity(Post entity) {
    AnswerDetailResponse response = new AnswerDetailResponse();

    response.setQuestionId(entity.getParentId());
    response.setAnswerId(entity.getId());
    response.setBody(entity.getBody());
    response.setScore(entity.getScore());
    response.setTags(entity.getTags());
    response.setAccepted(BaseUtil.isEqual(entity.getAcceptAnswerId(), entity.getId()));
    response.setLink(SysConfig.QUESTION_DEFAULT_URL + entity.getParentId());
    response.setCreatedAt(entity.getCreatedAt());
    response.setLastEditedAt(entity.getLastEditedAt());
    response.setUsed(entity.getIsUsed());
    response.setDeleted(entity.getIsDeleted());

    return response;
}

现在,我没有从请求中获得 'score' 值。所以,我得到了例外。 没有像mapstruct,modelmapper这样的库...有什么有效的方法可以解决这个问题吗..?

分数可以从请求中得到,也可以不...

仔细看看你的 Dto AnswerDetailResponse

private int score;

int 是一个不能容纳 null 值的基元。

改成

private Integer score;

既然这条线entity.getScore()有可能产生Null,那么不管怎么设置score的值,可以这样:

response.setScore(Optional.ofNullable(entity.getScore()).orElse(0));

注意:假设 score 的数据类型是整数,例如