As an answer to okutane, please see snippet:
@JoinColumn(name = "car_id", insertable = false, updatable = false) @ManyToOne(targetEntity = Car.class, fetch = FetchType.EAGER) private Car car; @Column(name = "car_id") private Long carId;
So what happens here is that when you want to do an insert/update, you only populate the carId field and perform the insert/update. Since the car field is non-insertable and non-updatable Hibernate will not complain about this and since in your database model you would only populate your car_id as a foreign key anyway this is enough at this point (and your foreign key relationship on the database will ensure your data integrity). Now when you fetch your entity the car field will be populated by Hibernate giving you the flexibility where only your parent gets fetched when it needs to.
answered by 'Jonck van der Kogel'