При сохранении значение внешнего ключа в дочерней таблице пусто для службы REST XML - PullRequest
0 голосов
/ 12 июня 2018

Это сервис REST XML.При сохранении значение внешнего ключа в дочерней таблице пусто.Идентификаторы @ используют последовательность, и она отлично работает.Я не добавил код генератора последовательности.

//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;


}

Это то, что я использую для отображения.

// MainDto

@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;

}

// Child 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>

Здесь requestId добавляется как пустая таблица REQ_DETAILS.Все остальные пропущенные записи сохраняются.

Дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

0 голосов
/ 14 июня 2018

Когда тип выборки LAZY, набор данных пуст.Вы можете использовать EAGER типа Fetch, но это дорогое

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...