#hibernate #jpa #spring-data-jpa
Вопрос:
Я пытаюсь создать единую связь между двумя сущностями, но я получаю эту ошибку:
@OneToOne или @manytoon в бэкендсервисе.сущность.Идентификатор BookingEntity.roomId ссылается на неизвестную сущность: долго
Мои сущности
@Data
@Entity(name = "bookings")
public class BookingEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "fk_roomId", referencedColumnName = "id")
private Long roomId;
@Column(name = "booked_by")
private String bookedBy;
@Column(name = "date_booked")
private String dateBooked;
}
@Data
@Entity(name = "rooms")
public class RoomEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "room_name")
private String roomName;
@OneToOne(mappedBy = "fk_roomId")
private BookingEntity bookingEntity;
}
Ответ №1:
В поле связи вы должны использовать фактическую сущность, а не только Длинное поле. Итак, этот код:
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "fk_roomId", referencedColumnName = "id")
private Long roomId;
следует изменить на что-то вроде
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "fk_roomId", referencedColumnName = "id")
private RoomEntity room;
Кроме того, я хотел бы отметить, что из соображений производительности настоятельно рекомендуется объявлять ваши ассоциации ленивыми:
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
Комментарии:
1. Спасибо. Единственная проблема в том,что это портит мои модульные тесты. например, набор, получить roomId больше не работает!!
2. Тогда что-то не так с модульным тестом. Я предлагаю создать правильный вопрос здесь на SO.