Два внешних ключа действуют как первичный ключ в сущности для OneToOne, я получаю сообщение об ошибке «Указан неверный тип для класса .....»
Когда я пытался отправить данные POST, он получаетвставлен правильно, но GET не работает. Если я изменю OneToOne на OneToMany, он будет работать для POST & GET обоим.
Запрос:
{
"items": [
{
"applicant": {
"guests": [
{
"seqNumber": 1,
"name": "name",
"gender": "gender"
}
]
}
}
]
}
Назад Ссылка:
reservation.getItems().forEach(i -> {
i.setReservation(reservation);
i.getApplicant().setItem(i);
i.getApplicant().getGuests().forEach(g -> g.setApplicant(i.getApplicant()));
});
Объект резервирования:
@Entity
@Getter
@Setter
public class Reservation {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID_RESERVATION", nullable = false, updatable = false)
private String reservationId;
@OneToMany(mappedBy = "reservation", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonManagedReference
private Set<Item> items = new HashSet<>();
}
Объект Entity:
@Entity
@Getter
@Setter
@IdClass(Item.ItemKey.class)
public class Item {
@Id
@Column(name = "ID_ITEM_RESERVATION", nullable = false, updatable = false)
private long itemReservationId;
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID_RESERVATION", referencedColumnName = "ID_RESERVATION", nullable = false, updatable = false)
@JsonBackReference
private Reservation reservation;
@OneToOne(mappedBy = "item", cascade = CascadeType.ALL)
@JsonManagedReference
private Applicant applicant;
@Data
static class ItemKey implements Serializable {
private Reservation reservation;
private long itemReservationId;
}
}
Entity Entity:
@Entity
@Getter
@Setter
@IdClass(Applicant.ApplicantKey.class)
public class Applicant {
@Id
@OneToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "ID_RESERVATION", referencedColumnName = "ID_RESERVATION", nullable = false, updatable = false),
@JoinColumn(name = "ID_ITEM_RESERVATION", referencedColumnName = "ID_ITEM_RESERVATION", nullable = false, updatable = false)
})
@JsonBackReference
private Item item;
@OneToMany(mappedBy = "applicant", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonManagedReference
private Set<Guest> guests = new HashSet<>();
@Data
static class ApplicantKey implements Serializable {
private Item item;
}
}
Guest Entity:
@Entity
@Getter
@Setter
@IdClass(Guest.GuestKey.class)
public class Guest {
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "ID_RESERVATION", referencedColumnName = "ID_RESERVATION", nullable = false, updatable = false),
@JoinColumn(name = "ID_ITEM_RESERVATION", referencedColumnName = "ID_ITEM_RESERVATION", nullable = false, updatable = false)
})
@JsonBackReference
private Applicant applicant;
@Id
@Column(name = "S_NUMBER", nullable = false, updatable = false)
private Short seqNumber;
@Column(name = "N_NAME")
private String name;
@Column(name = "CD_GENDER")
private String gender;
@Data
static class GuestKey implements Serializable {
private Applicant applicant;
private Short seqNumber;
}
}
Ожидаемый результат должен быть таким же, как Request, нополучение ошибки "... Указан неверный тип для класса ..."
Вот код .