Benim, user(öğrenci ve öğretmenler) ve lesson(teacher_id-FK, ve diğer bilgiler) olarak iki tablom var.(many-to-many ilişki için birde student_lesson tablosu var.)Bu iki tablo arasında hem 1-m hem de m-n ilişki kurmak istiyorum..

User tablosu:
Hem öğrenci hem de öğretmenleri barındırıyor.Yani tüm kullanıcıları bu tabloda tutuyorum.
Lesson tablosu:
Burada da dersler kayıtlı.Ancak her dersin bir 'teacher_id' si var yani her ders bir öğretmen tarafından oluşturulmalı.Bu yüzden:
user-1--m-Lesson şeklinde bir ilişki kuruyorum.
user-m--n-Lesson --> student_lesson olarak bi ilişki tablosu oluşturuyorum.Burada da (student_id,lesson_id) tutuyorum.

Ancak öğrenciye ders eklerken (student_lesson tablosuna) öğrenciye ekleyip güncelliyorum fakat bir türlü update/insert komutunu işlemiyor.Sql kodlarını console çıktısında takip ediyorum. update metodunu çağırmama rağmen güncellemiyor.Herşey doğru ancak mantık hatası olup olmadığını merak ediyorum.Aynı anda iki tablo arasında hem one-to-many hemde many-to-many ilişkisi kurabilir miyim?Bu mantıklı mı ya da geçerli mi?

UPDATE:
Lesson.class

@ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinTable(name = "lesson_student",
    joinColumns = { 
        @JoinColumn(name = "lesson_id", referencedColumnName = "id") }, 
    inverseJoinColumns = { 
        @JoinColumn(name = "student_id", referencedColumnName = "id") })
public Set<User> getLessonStudents()


User.class

@ManyToMany(mappedBy="lessonStudents",cascade=CascadeType.ALL)
public Set<Lesson> getStudentLessons() {

soruldu: 29 Mar '15, 13:48

Ergin's gravatar image

Ergin
768814
cevap kabul oranı: 50%

değiştirildi: 29 Mar '15, 18:17

session'u flush ve commit ettiriyormusun?

(29 Mar '15, 14:30) Turgay Can Turgay%20Can's gravatar image

spring kullanıyorum.Service katmanında transactional annotation ekliyorum.Normal kullanıcı eklerken ya da ders eklerken sadece openSession.save(object) demem yetiyor.ancak bu many to many de değişiklik yapıp update dediğimde hiç bir şey olmuyor keşke hata verse oda olmuyor.Bende belki de iki tane farklı ilişki kurdum bunu algıyamıyor diye düşündüm

(29 Mar '15, 14:42) Ergin Ergin's gravatar image

sonuçta one to many ilişkisini düzgün olarak kullanıyorum ama many-to-many ilişkisinde sanki onu tanımıyor onda değişiklik yapınca farketmiyor gibi.

(29 Mar '15, 14:44) Ergin Ergin's gravatar image

many to many ilişkideki ara tabloyu hibernate'mi yarattı yoksa sizmi yarattınız. ve many-to-many ara tablosunda iki tablonun id'leri dışında bir alan mevcutmudur?

ManyToMany ilişkinizi objeler üzerindeki anotasyonlar ile yazarmısınız. cascade yokmuş gibi duruyor ama domain kodlarını görmekte fayda var :)

(29 Mar '15, 15:48) Turgay Can Turgay%20Can's gravatar image

soruya şimdi ekledim.İki tablonun id leri dışında bir alan yok.ilgilendiğin için teşekkür ederim:)

(29 Mar '15, 18:15) Ergin Ergin's gravatar image

Objeler içindeki veriler tutarlı ise persist/merge için ilişkiler doğru :)

Yinede işlemi yaptıktan sonra session'ı bir flush ettirelimmi?

protected void flushAndClear() { Session session = sessionFactory.getCurrentSession(); session.flush(); session.clear(); }

eger topsecret bir kod değilse github/bitbucket gibi repoda watcher olarak ekleyebilirsin. @TurgayCan2

(29 Mar '15, 19:09) Turgay Can Turgay%20Can's gravatar image

cevaplar için teşekkürler.hibernate'in kendi annotasyonu olan save_update kullandım.Şuanda 'merge' edince düzgün bir şekilde ekliyor.Fakat update/saveOrUpdate komutu hala select'lemek ile yetiniyor.Bu bana ileride sorun olur mu?Kodları sakladığımdan değil sadece kod yığınıyla insanları sorudan kaçırmak istemedim.Ama ileride sorun yaratırsa tekrar konu açarım.Teşekkürler:)

(31 Mar '15, 17:36) Ergin Ergin's gravatar image
7 yorumdan 5 tanesi gösteriliyor hepsini göster
Bu soruya ilk cevap veren sen ol!
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×109
×19
×5
×1

Soruldu: 29 Mar '15, 13:48

Görüntüleme: 510 kez

Son güncelleme: 31 Mar '15, 17:36

powered by BitNami OSQA