У меня есть две сущности 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;
}
Но из-за этого мне придется дважды вызывать метод save (). Во-первых, когда мне нужно сохранить VacationTour в БД, который вернет тот же объект с идентификатором. Во-вторых, установив этот идентификатор в объекте VacationTourDestination, мне придется снова вызвать метод save ().
на полях: почитайте о List <> и Set <> в объектах JPA. I Set соответствует дизайнерским идеям, имеет лучшую производительность
@Nirav Я считаю, что вы можете установить родителя перед фактическим сохранением, а затем сохранить оба одновременно. Если это не сработает, вам нужно вызвать save () 2 раза.




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