Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将DTO转换为实体一方关系?_Java_Spring_Spring Boot_Mapping_Dto - Fatal编程技术网

Java 如何将DTO转换为实体一方关系?

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

我有四个类(Project、supplyRequest、Product和SupplyRequestProduct),SupplyRequestProduct是supplyRequest和Product之间具有附加属性的关联。所有CRUD方法对于这些类都可以正常工作。 但是当我想创建一个新的SupplyRequest对象时,我遇到了一个问题。我在控制台中发现了这个错误

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"
      }
    }
  ]
}