【发布时间】:2020-10-12 05:15:29
【问题描述】:
阅读所有类似的问题,但找不到解决方案。从 UI(json) 获取父母和孩子时,一切都很好。但是,当从请求数据(AddActionRequest)下方的 UI(json)获取并进行一些转换时,会出现错误 A different object with the same identifier value has been associated with the session:[com.asdet.model.jpa.ActionRequestParam#53] 我真的希望得到帮助,翻了很多东西,但我不明白为什么会出现这个错误。
@Data
public class AddActionRequest {
private String externalRequestId;
@JsonDeserialize(using = JsonDateTimeDeserializer.class)
@JsonSerialize(using = JsonDateTimeSerializer.class)
@ApiModelProperty(required = true, example = "01.01.2020 00:00:01")
@JsonFormat(pattern = "dd.MM.yyyy HH:mm:ss")
private Date requestDate;
private String userIp;
private JsonNode content;
}
父实体:
@Data
@Entity
@Table(name = "ts_action_requests")
@EqualsAndHashCode(exclude = {"params"})
public class ActionRequest {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sq_ts_action_requests")
@SequenceGenerator(name = "sq_ts_action_requests", sequenceName = "sq_ts_action_requests", allocationSize = 0)
private Integer requestId;
private String externalRequestId;
@JsonDeserialize(using = JsonDateTimeDeserializer.class)
@JsonSerialize(using = JsonDateTimeSerializer.class)
private Date requestDate;
@JsonDeserialize(using = JsonDateTimeDeserializer.class)
@JsonSerialize(using = JsonDateTimeSerializer.class)
@Column(insertable = false, updatable = false)
private Date createdOn;
private String userIp;
@JsonManagedReference
@OneToMany(mappedBy = "request", cascade = CascadeType.ALL)
private List<ActionRequestParam> params;
子实体:
@Data
@Entity
@Table(name = "ts_action_request_params")
@ToString(exclude = {"request"})
public class ActionRequestParam {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sq_ts_action_request_params")
@SequenceGenerator(name = "sq_ts_action_request_params", sequenceName = "sq_ts_action_request_params", allocationSize = 10)
private Long requestParamId;
@ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@JsonBackReference
@JoinColumn(foreignKey = @ForeignKey(name = "ts_action_request_params_f1"), name = "request_id", nullable = false)
private ActionRequest request;
@NotBlank
private String paramName;
private String paramValue;
@JsonIgnore
private Integer orderNo;
}
存储库:
@Repository
public interface ActionRequestRepository extends JpaRepository<ActionRequest, Integer> {
}
和
@Repository
public interface ActionRequestParamRepository extends JpaRepository<ActionRequestParam, Long> {
}
服务:
@Service
@Transactional
public class ActionServiceImpl implements ActionService {
@Autowired
private ActionRequestRepository requestRepository;
@Autowired
private ActionResponseRepository responseRepository;
@Override
public ActionRequest addActionRequest(AddActionRequest request) throws Exception {
ActionRequest r = new ActionRequest();
r.setExternalRequestId(request.getExternalRequestId());
r.setRequestDate(request.getRequestDate());
r.setUserIp(request.getUserIp());
Iterator<Map.Entry<String, JsonNode>> nodes = request.getContent().fields();
List<ActionRequestParam> params = new ArrayList<>();
int i = 1;
while (nodes.hasNext()) {
Map.Entry<String, JsonNode> entry = nodes.next();
ActionRequestParam requestParam = new ActionRequestParam();
requestParam.setParamName(entry.getKey());
requestParam.setParamValue(entry.getValue().toString());
requestParam.setOrderNo(i++);
requestParam.setRequest(r);
params.add(requestParam);
}
r.setParams(params);
return requestRepository.save(r);
}
}
【问题讨论】:
标签: spring hibernate jpa spring-data-jpa spring-data