Java 如何将DTO转换为实体一方关系?
我有四个类(Project、supplyRequest、Product和SupplyRequestProduct),SupplyRequestProduct是supplyRequest和Product之间具有附加属性的关联。所有CRUD方法对于这些类都可以正常工作。 但是当我想创建一个新的SupplyRequest对象时,我遇到了一个问题。我在控制台中发现了这个错误Java 如何将DTO转换为实体一方关系?,java,spring,spring-boot,mapping,dto,Java,Spring,Spring Boot,Mapping,Dto,我有四个类(Project、supplyRequest、Product和SupplyRequestProduct),SupplyRequestProduct是supplyRequest和Product之间具有附加属性的关联。所有CRUD方法对于这些类都可以正常工作。 但是当我想创建一个新的SupplyRequest对象时,我遇到了一个问题。我在控制台中发现了这个错误 java.lang.NullPointerException:null 在com.mmalki.spingboot.model.S
java.lang.NullPointerException:null
在com.mmalki.spingboot.model.SupplyRequestProduct.hashCode(SupplyRequestProduct.java:45)~[classes/:na]
在java.util.HashMap.hash(HashMap.java:339)~[na:1.8.0_171]
在java.util.HashMap.put(HashMap.java:612)~[na:1.8.0_171]
在java.util.HashSet.add(HashSet.java:220)~[na:1.8.0_171]
在com.mmalki.spingboot.mapping.SupplyRequestMapperImpl.supplyRequestProductDTOSetToSupplyRequestProductSet(SupplyRequestMapperImpl.java:152)~[classes/:na]
在com.mmalki.spingboot.mapping.SupplyRequestMapperImpl.convertToEntity(SupplyRequestMapperImpl.java:66)~[classes/:na]
在com.mmalki.spingboot.web.SupplyRequestController.saveProduct(SupplyRequestController.java:61)~[classes/:na]
我问了类似的问题,但没有帮助
这是我的代码:
供应请求实体
@Entity
@Data @NoArgsConstructor @AllArgsConstructor @ToString
@Where(clause = "DELETED = 0")
@EqualsAndHashCode(callSuper = false)
public class SupplyRequest extends AuditModel {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Size(min = 3)
private String reference;
private LocalDate dueDate;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "project_id",nullable = false)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonManagedReference
private Project project;
@OneToMany(mappedBy = "supplyRequest",fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Set<SupplyRequestProduct> supplyRequestProducts;
public SupplyRequest(String reference, LocalDate dueDate, Project project, SupplyRequestProduct... supplyRequestProducts ) {
this.reference = reference;
this.dueDate = dueDate;
this.project = project;
for (SupplyRequestProduct supplyRequestProduct : supplyRequestProducts )
supplyRequestProduct.setSupplyRequest(this);
this.supplyRequestProducts = Stream.of(supplyRequestProducts).collect(Collectors.toSet());
}
}
供应请求产品到
@Getter @Setter @AllArgsConstructor @NoArgsConstructor @EqualsAndHashCode
public class SupplyRequestProductDTO {
private Long id;
private int quantity;
private ProductDTO productDTO;
private SupplyRequestDTO supplyRequestDTO;
}
SupplyRequestMapper
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE,componentModel = "spring")
public interface SupplyRequestMapper {
@Mapping(source = "reference",target = "reference")
@Mapping(source = "dueDate",target = "dueDate")
@Mapping(source = "creationDate",target = "creationDate")
@Mapping(source = "project",target = "projectDTO")
@Mapping(source = "supplyRequestProducts",target = "supplyRequestProductsDTO")
SupplyRequestDTO convertToDTO(SupplyRequest supplyRequest);
List<SupplyRequestDTO> convertToListDTO(Iterable<SupplyRequest> supplyRequests);
@Mapping(source = "reference",target = "reference")
@Mapping(source = "dueDate",target = "dueDate")
@Mapping(source = "creationDate",target = "creationDate")
@Mapping(source = "projectDTO",target = "project")
@Mapping(source = "supplyRequestProductsDTO",target = "supplyRequestProducts")
SupplyRequest convertToEntity(SupplyRequestDTO supplyRequestDTO);
}
我知道当我想将SupplyRequestProductsTo转换为supplyRequestProducts时出现了问题,但我不知道为什么。
请帮忙
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE,componentModel = "spring")
public interface SupplyRequestMapper {
@Mapping(source = "reference",target = "reference")
@Mapping(source = "dueDate",target = "dueDate")
@Mapping(source = "creationDate",target = "creationDate")
@Mapping(source = "project",target = "projectDTO")
@Mapping(source = "supplyRequestProducts",target = "supplyRequestProductsDTO")
SupplyRequestDTO convertToDTO(SupplyRequest supplyRequest);
List<SupplyRequestDTO> convertToListDTO(Iterable<SupplyRequest> supplyRequests);
@Mapping(source = "reference",target = "reference")
@Mapping(source = "dueDate",target = "dueDate")
@Mapping(source = "creationDate",target = "creationDate")
@Mapping(source = "projectDTO",target = "project")
@Mapping(source = "supplyRequestProductsDTO",target = "supplyRequestProducts")
SupplyRequest convertToEntity(SupplyRequestDTO supplyRequestDTO);
}
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE,componentModel = "spring")
public interface SupplyRequestProductMapper {
@Mapping(source = "quantity",target = "quantity")
@Mapping(source = "supplyRequest",target = "supplyRequestDTO")
@Mapping(source = "product",target = "productDTO")
SupplyRequestProductDTO convertToDTO(SupplyRequestProduct supplyRequestProduct);
List<SupplyRequestProductDTO> convertToListDTO(Iterable<SupplyRequestProduct> supplyRequestProducts);
@Mapping(source = "quantity",target = "quantity")
@Mapping(source = "supplyRequestDTO",target = "supplyRequest")
@Mapping(source = "productDTO",target = "product")
SupplyRequestProduct convertToEntity(SupplyRequestProductDTO supplyRequestProductDTO);
}
@RestController
@RequestMapping(path = "api/v1/supply-requests")
public class SupplyRequestController {
@Autowired
private ISupplyRequestService supplyRequestService;
@Autowired
private SupplyRequestMapper supplyRequestMapper;
@RequestMapping(path = "", method = RequestMethod.POST)
public ResponseEntity<Long> saveProduct(@RequestBody SupplyRequestDTO supplyRequestDTO) throws RecordNotFoundException {
SupplyRequest supplyRequest = supplyRequestMapper.convertToEntity(supplyRequestDTO);
SupplyRequest supplyRequest1 = supplyRequestService.save(supplyRequest);
return new ResponseEntity<>(supplyRequest1.getId(), new HttpHeaders(), HttpStatus.OK);
}
}
{
"reference": "SPR-002",
"dueDate": "2020-05-17",
"creationDate": "2020-05-17",
"projectDTO": {
"id": 1,
"title": "Project",
"description": "Project 1",
"creationDate": "2020-04-23"
},
"supplyRequestProductsDTO": [
{
"quantity": 4,
"productDTO": {
"id": 1,
"reference": "PRT-001",
"title": "Product 1",
"description": "Product",
"unite": "u",
"price": 300,
"quantity": 300,
"creationDate": "2020-04-23"
}
},
{
"quantity": 6,
"productDTO": {
"id": 2,
"reference": "PRT-002",
"title": "Product 2",
"description": "Product",
"unite": "u",
"price": 300,
"quantity": 300,
"creationDate": "2020-04-23"
}
}
]
}