Herkese merhaba. Projelerin sql sorgu karmaşıklığından kurtulmak için geliştirmekte olduğum projelerde jpa kullanmaya başladım. Implemantasyon olarakda standartların dışına fazla çıkmamak için eclipselink kullanıyorum. Fakat geliştirmekte olduğum iki projede mantık olarak şöyle bi sorunla karşılaştım; eğer bir sürü komposizyon ilişkisine sahip nesneleri kayıt etmeye çalışırken çeşitli problemler çıkıyor karşıma. Basit bir verecek olursam
@Entity
public class Lecture {
@Id
private int id;
private String name;
@OneToOne(cascade = CascadeType.PERSIST)
private Teacher teacher;
//getter and setter
}
@Entity
public class Teacher {
@Id
private int id;
@Column(unique = true)
private String code;
private String name;
//getter and setter
}
Görüldüğü gibi iki adet entity nesnem mevcut ve örneğin web servis kullanarak jsondan gelen data ile bir Lecture nesnesi oluşturuyorum.
Lecture lecture = new Gson().fromJson(jsonSource, Lecture.class);
Benim sıkıntı çekitğim noktada işte ouşturduğum bu lecture nesnesini persist ederken nasıl bir strateji kullanmam gerektiği. lecture nesnesinin sahip olduğu teacher nesnesi yönetimli halde olmadığından dolayı ben burada lecture nesnesi direk persist etmek istediğimde o teacher nesnesi veri tabanında kayıtlı olduğu halde tekrar eklemeye çalışıyor dolayısıyla duplicate uniqe key hatası alıyorum. Aklıma gelen çözüm aşağıdaki gibi bir yöntem kullanarak lecture nesnesinin teacher nesnesi zaten veritabanında kayıtlıysa o nesneyi yönetimli hale getirmek ve ondan sonra bu lecture nesnesini persist etmek.
Teacher managedTeacher = findTeacherByCode(lecture.getTeacher().getCode());
if(managedTeacher != null) {
lecture.setTeacher(managedTeacher);
}
Fakat bu yöntem ne kadar doğru yoksa benim izlediğim yöntem baştan mı yanlış? JPA ile tutorial düzeyinde bilgim olmasına karşın ilk defa projelerde kullanıyorum. Jpa'yı aktif olark kullanmış hocalarımdan tavsiyelerini bekliyorum.