在保存时,子表中的外键值对于 REST XML 服务为空



这是一个REST XML服务。在保存时,子表中的外键值为空。 @Id正在使用序列,它工作正常。我没有在这里添加序列生成器代码。

//Main Entity
------------
@Entity
@Table(name="REQUEST")
public class MsaDisabScreenRequest implements Serializable {
@Id
@Column(name="REQUEST_ID")
private long requestId; //sequence

@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY, mappedBy="msaDisabScreenRequest")
private Set<ReqDetail> disabilities;
}

子实体

@Entity
@Table(name="REQ_DETAILS")
public class ReqDetail implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="MAP_ID")
private long mapId;  //sequence
@Column(name="TYPE_ID")
private long disabilityTypeId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="REQUEST_ID")
privateRequest msaDisabScreenRequest;

}

这是我用来映射的dto。

主 Dto

@XmlRootElement(name="DisabilityRequest")
@XmlAccessorType(XmlAccessType.FIELD)
public class MsaDisabScreenRequestDto implements Serializable {
private static final long serialVersionUID = 1L;
private long requestId; 
@NotNull
private Set<DetailDto> disabilities;
}

儿童 DTO

@XmlRootElement(name="disabilities")
@XmlAccessorType(XmlAccessType.FIELD)
public class MsaDisabScreenReqDetailDto implements Serializable {
private static final long serialVersionUID = 1L;
private long mapId; 
private long disabilityTypeId;
@XmlTransient
private RequestDto msaDisabScreenRequest;
}

这是控制器

@RequestMapping(value = ApiPath.REQUEST, method = RequestMethod.POST, produces = { "application/xml"})
public @ResponseBody ResultDecorator saveScreeningRequest(@Valid @RequestBody RequestDto requestDto) throws Exception {
.
.
.
.
}

保存使用 JPA 存储库以持久保存的代码。

实现代码仅添加了代码发布以保存

@Autowired
private OrikaBeanMapper mapper;
.
.
.
.
.
.
.
// mapping
Request request = mapper.map(requestDto,Request.class);
Request Res = msaRepository.save(request);

这是我发送的请求有效负载

<?xml version="1.0" encoding="UTF-8" ?>
<DisabilityRequest>
<disabilities>
<disabilityTypeId>9</disabilityTypeId>
</disabilities>
</DisabilityRequest>

在这里,请求 ID 作为空REQ_DETAILS添加到表中。传递的所有其他条目都将保留。

如果您需要任何进一步的详细信息,请告诉我。

当提取类型为 LAZY 时,数据集为空。您可以使用获取类型EAGER 但它很昂贵

最新更新