Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

NotNull annotation preventing builds in spring boot application

I am trying to run a spring boot app.
I have a model class(Category) and a service class(CategoryService)
corresponding to the model

Category.java

@Data
@Entity
public class Category implements Serializable {

    @Id
    @GeneratedValue
    private Integer id;

    @NotNull
    private String categoryName;

    @NotNull
    private Integer totalResourceCount;

    @NotNull
    private Integer categoryValue;

    @Column(updatable = false, nullable = false)
    private Timestamp createdDate;

    @NotNull
    private Timestamp updatedDate;
}

CategoryService.java

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

@Service
public class CategoryService {

    @Autowired
    CategoryRepository categoryRepository;

    public List<CategoryDTO> getAllCategories() {
        List<CategoryDTO> categoryDTOList = new ArrayList<>();
        List<Category> categories = categoryRepository.findAll(Sort.by("createdDate"));
        if (categories != null) {
            categories.forEach(category -> {
                CategoryDTO categoryDTO = new CategoryDTO();
                categoryDTO.setCategoryId(category.getId());
                categoryDTO.setCategoryName(category.getCategoryName());
                categoryDTO.setTotalResourceCount(category.getTotalResourceCount());
                categoryDTO.setCategoryValue(category.getCategoryValue());
                categoryDTOList.add(categoryDTO);
            });
        }
        return categoryDTOList;
    }

    public void createCategory(CategoryDTO categoryDTO) {
        Category category = new Category();
        category.setCategoryName(categoryDTO.getCategoryName());
        category.setCategoryValue(categoryDTO.getCategoryValue());
        category.setTotalResourceCount(0);
        category.setCreatedDate(DateUtil.getCurrentTimestamp());
        category.setUpdatedDate(DateUtil.getCurrentTimestamp());
        categoryRepository.save(category);
    }
}

When I try to build the project, I am getting the following erorr

CategoryService.java:[37,29] constructor Category in class Category cannot be applied to given types;
[ERROR]   required: java.lang.String
[ERROR]   found:    no arguments
[ERROR]   reason: actual and formal argument lists differ in length

I understand that the error is due to instantiating the Category class without passing the @NotNull fields in the constructor. So I removed the @NotNull annotations and the build succeeds. However, this is not desired as the @NotNull annotation have some connection to the field validations.

What is the correct way to solve this issue other than removing the @NotNull annotation?
Do I need to declare a constructor class in the Category model and then initialise the Category instance by passing all the field values that are @NotNull ?

>Solution :

@Data includes @RequiredArgsConstructor, so a constructor will be generated with all @NotNull annotated properties.

If you also want to use a no-args constructor, you have to add @NoArgsConstructor

@Data
@NoArgsConstructor
@Entity
public class Category implements Serializable {

    @Id
    @GeneratedValue
    private Integer id;

    @NotNull
    private String categoryName;

    @NotNull
    private Integer totalResourceCount;

    @NotNull
    private Integer categoryValue;

    @Column(updatable = false, nullable = false)
    private Timestamp createdDate;

    @NotNull
    private Timestamp updatedDate;
}

Now the generate code includes both constructors

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading