Construtor customizado utilizando lombok

Olá pessoal, preciso de uma ajuda.

Ainda não entendi muito bem como manipular o framework lombok.

Eu tenho um Bean que é uma entidade do meu banco de dados mongo DB.
Eu quero criar um construtor utilizando somente alguns atributos. Para isso seria necessário utlizar a notação @RequiredArgsConstructor. No entanto, para que isso funcione eu preciso inserir a notação @NonNull naqueles que eu quero que sejam os parâmetros do método.

Mas eu tenho um problema: O id precisa ser nulo para que o próprio banco atribua um valor ao mesmo.

Agora fiquei dividido entre dois problemas:

  • Insiro @NonNull e o atributo entra como parâmetro mas dá erro em tempo de execução por este ser nulo
  • Não o insiro e meu construtor fica errado.

Alguém saberia como posso resolver isso?

Muito grato a todos.

/**
 * Post Entity
 */
@Document
@NoArgsConstructor
@RequiredArgsConstructor
@EqualsAndHashCode(callSuper = false, of = {"id", "date", "title", "body", "author"})
@Getter
@Setter
public class Post implements Serializable {
    /**
     * Post id
     */
    @Id
    @NonNull // Problemas aqui
    private String id;
    /**
     * Post date
     */
    @NonNull
    private Date date;
    /**
     * Post title
     */
    @NonNull
    private String title;
    /**
     * Post content
     */
    @NonNull
    private String body;
    /**
     * Object which contains post author
     */
    @NonNull
    private AuthorDTO author;

    /**
     * Comments list from this post
     */
    private List<CommentDTO> comments = new ArrayList<>();
}

Se o banco de dados que irá setar o ID, não tem pq ele ir no construtor então.


Particularmente, acho uma ideia ruim usar lombok, pq ele engessa uma coisa simples de fazer. A ideia de escrever menos acaba sendo tratado como praticidade, mas acaba se fornando em dificuldade (como essa sua situação, por exemplo).

2 curtidas

De fato, tens toda razão. Eu estava instanciando o id como null. Na verdade, sequer deveria fazê-lo.

Estou aprendendo a utilizar o lombok pois a empresa em que trabalho o usa. Já que estamos usando, então que tiremos proveito dele.

Muito obrigado.

O assunto já tá resolvido, mas acho essa observação interessante. De todas bibliotecas semelhantes com que já trabalhei (auto value, immutables, usar entities de protobuf ), o lombok foi o menos invasivo de todos.

Não considero não usar nada pois já sofri muito debugando código que tinha campo adicionado depois que não foi adicionado ao equals/hashcode depois da classe ser gerada.

Mas enfim, uma coisa que você pode fazer no lombok é simplesmente voltar ao java padrão quando tiver dúvidas da coisa correta. Ele também tem ferramenta pra “delombok” o código e ver o que tá sendo gerado… o que facilita ver o que tem coisa errado.

Com o java 17 e records acho que vai ficar mais fácil viver sem essas coisas, mas até lá eu acho a melhorzinha.