Как установить родительский объект в дочернем объекте объекта без конструктора и метода установки в спящем режиме?

У меня есть две сущности VacationTour и VacationTourDestinations. У одного тура может быть несколько направлений. Я хочу сохранить тур и пункты назначения в базе данных, используя метод save () crudRepository с одним вызовом сохранения. Я не хочу вручную устанавливать тур в целевом объекте. Но мне нужен идентификатор тура в пункте назначения в качестве внешнего ключа. Возможно ли это?

VacationTourDestination.class

@Entity
@Table(name = "vacationTourDestinations")
public class VacationTourDestination {
@Id
@Column(name = "Id")
@GeneratedValue(strategy = GenerationType.AUTO)
protected int id;

@JoinColumn(name = "TourId")
@ManyToOne(fetch = FetchType.LAZY)
VacationTour tour;

@JoinColumn(name = "Country")
@ManyToOne
private Country country;

@Column(name = "destination")
String destination;
}

VacationTour.class

@Entity
@Table(name = "vacationTours")
public class VacationTour {

@Id
@Column(name = "Id")
@GeneratedValue(strategy = GenerationType.AUTO)
protected int id;

@Column(name = "adult")
int adult;
@Column(name = "child")
int child;
@Column(name = "infant")
int infant;

@Column(name = "termsAndConditions")
String TAC;

@OneToMany(mappedBy = "tour",cascade = CascadeType.ALL,orphanRemoval = true)
protected List<VacationTourDestination> tourDestinations; 
}

Hibernate требует, чтобы геттер / сеттер работал, иначе вы получите исключение. AFAIK нет никакого способа обойти это

XtremeBaumer 25.06.2018 12:23

Но из-за этого мне придется дважды вызывать метод save (). Во-первых, когда мне нужно сохранить VacationTour в БД, который вернет тот же объект с идентификатором. Во-вторых, установив этот идентификатор в объекте VacationTourDestination, мне придется снова вызвать метод save ().

Nirav 25.06.2018 12:29

на полях: почитайте о List <> и Set <> в объектах JPA. I Set соответствует дизайнерским идеям, имеет лучшую производительность

Jacek Cz 25.06.2018 12:30

@Nirav Я считаю, что вы можете установить родителя перед фактическим сохранением, а затем сохранить оба одновременно. Если это не сработает, вам нужно вызвать save () 2 раза.

XtremeBaumer 25.06.2018 12:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
4
187
0

Другие вопросы по теме