我正在尝试运行一个 Spring Boot 应用程序。 我有一个模型类(Category)和一个服务类(CategoryService) 对应型号
类别.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
@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);
}
}
当我尝试构建项目时,我收到以下错误
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
我知道该错误是由于实例化 Category 类而没有在构造函数中传递
@NotNull
字段造成的。所以我删除了 @NotNull
注释并且构建成功。然而,这是不希望的,因为 @NotNull
注释与字段验证有一些联系。
除了删除
@NotNull
注释之外,解决此问题的正确方法是什么?
我是否需要在 Category 模型中声明一个构造函数类,然后通过传递所有 @NotNull
的字段值来初始化 Category 实例?
@Data
包含 @RequiredArgsConstructor
,因此将生成包含所有 @NotNull
带注释的属性的构造函数。
如果你还想使用无参构造函数,则必须添加
@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;
}
现在生成代码包含两个构造函数