Eğer ki biz TeacherDetail'i yüklerken bize Teacher'da gelmesini istiyorsak işte bu süreç Bi-Directional olarak bilinir.
Bunu da yapmak tek yapmamız gereken bizim TeacherDetail'i güncellemektir.
@OneToOne(mappedBy = "teacherDetail")
private Teacher teacher;
// getter ve setteri de ekleBu kod parçacığını eklemektir.
mappedBy
bu hibernateye şunu söyler; Teacher classı içerisindeki teacherDetail property'sine bak ve bu property'de bulunan @JoinColumn'u kullanarak da Teacher için bilgileri yükle bu sayede ilişkili olunan Teacher'i getirir bize. Tabi istersek buraya da cascasdeType ekleyebiliriz. ALL olarak.
Ana uygulamamızı güncelleyelim.
@Bean
public CommandLineRunner commandLineRunner() {
return a -> {
Optional<TeacherDetail> optTeacherDetail = this.teacherDetailRepo.findById(1L);
TeacherDetail teacherDetail = optTeacherDetail.get();
System.out.println("Teacher Detail: "+teacherDetail.getTeacher().getFirstName()+" "+teacherDetail.getTeacher().getLastName());
};
}@Repository
public interface TeacherDetailRepository extends JpaRepository<TeacherDetail, Long>{
}Çıktımız şu şekilde gelir.
Teacher Detail: Minter CoderEğer ki biz TeacherDetail'de silme işlemini yaparsak Teacher'da silinir. Eğer ki Teacher'in silinmesini istemiyorsak TeacherDetail içerisindeki cascade type'yi şu şekilde güncelleyebiliriz.
@OneToOne(mappedBy = "teacherDetail", cascade = {
CascadeType.DETACH,
CascadeType.MERGE,
CascadeType.PERSIST,
CascadeType.REFRESH
})
private Teacher teacher;Şeklinde DELETE olmadan yapıp ayrıca setTeacher(null) şeklinde süreci devam ettirmeliyiz!!!!!!
teacherDetail.getTeacher().setTeacherDetail(null);