Şimdi bir tabloya verileri insert edip servis tabloma kaydediyorum Servis tablom servisId; servisAdi; 1. save tuşuna basınca. Servis tabloma veriyi kaydettikten sonra. 2. bir form sayfası geliyor

yeni bu tablomun adı Parça parca ismimi girip kaydet dediğimde . Benim bu parca için yukarıdaki servisId mi yakalamam lazım. Bunu nasıl yapabilirim?

parcaId; parcaAdi; servisId;

soruldu: 20 May '14, 15:59

gezegen's gravatar image

gezegen
25141617
cevap kabul oranı: 0%

Biraz daha ayrıntılı yazayım Şimdi ben önce servisi gireceğim. Örneğin serviAdi; servisAdresi; servisLokasyon gibi. Sonrada bu servise parçalar eklemem lazım Örneğin Çamaşır makinesi için servis gitti servis olan bilgiler girildi. Yalnız bu serviste makinada belki 5-6 parca eklendi işlem yapıldı.

Ben bu mantıktan yola çıkarak Şöyle düşündüm. Önce servis tabllosu gelir. Oraya servis olan firma adı telefonu vs bilgiler girilir. Kaydet butonuna basılır. Servis bilgileri servis tablosuna kaydolur. Ekrana 2 bir form belir bu forumun adıda DegisenParcalar Bu sefer ekranki formda parcaAdi ve parcaOmru alanı olur ben 3-4 parca ekleyeceğim gönder dediğimde Bu sefer bu forma girdiklerim gidicek DegisenParcalar tablosuna kaydolucak. Buraya kadar herşey normal.

Ben istiyorumki Servis formu doldurulup kaydete bastıktan sonra servisId olan deger. DegisenParcalar isimli entity e atansın. ve yeni gireceğim parcaAdi ve parcaOmru alanlarınıda göndereyim. İnsert dediğimde bunlar topluca gidip DegisenParcalar isimli tabloya kaydolsunlar.

Mesela ben şöyle yapmıştım DegisenParcalar isimli entity sınıfımın içine int servisNo; diye bir alan oluşturdum ve Servis sayfam kaydolduktan sonra aşağıdaki yöntem çalışacak. servis entitysinde var olan servisNo değeri Aşağıdaki yöntem ile DegisenParcalar isimli entity sınıfımın içindeki servisNo alanına gidecek.

Servis servis = new Servis();
DegisenParcalar degisen = new DegisenParcalar();
degisen.setServisNo(servis.getServisNo);
  1. bir sorum daha Ve buna ilaveten aklıma bir yol daha geldi dedimki servis formunu kaydettin ikinci bir dorm geldi. Ozaman bir method yap. Bir sql ile veritabanındaki servis formunun en son insert edilmiş olan servisNo sunu al ve bu değeri DegisenParcalar isimli entitye at.

select last insert id

(21 May '14, 05:23) gezegen gezegen's gravatar image

Mademki JSF kullanıyorsun neden 2nci bir sayfaya yönlendiriyorsun. Primefaces Wizard kullanabilirsin mesela.

http://www.primefaces.org/showcase/ui/panel/wizard.xhtml

Benim önerim şu; Presentation katmanında ister değişkenlere istersen de DTO'larda gerekli bilgileri (ServisNo, tarih, değişen parçalara ait Id'ler ...) sakla.

DAO katmanına bu bilgileri gönder ve aşağıdaki cevapta söylediğim şekilde veritabanına kaydettir. Daha sonra bir Servisi çağırdığında, ona ait parça listesini lazy olarak zaten çağırabilirsin. Bırak ID'leri JPA takip etsin. Sanane ki :)

(21 May '14, 06:01) SaRPaRDa SaRPaRDa's gravatar image

"--bir sorum daha Ve buna ilaveten aklıma bir yol daha geldi dedimki servis formunu kaydettin ikinci bir dorm geldi. Ozaman bir method yap. Bir sql ile veritabanındaki servis formunun en son insert edilmiş olan servisNo sunu al ve bu değeri DegisenParcalar isimli entitye at.

select last insert id--"

Bu yöntem çok kullanıcı sistemlerde çok riskli olur. A Servisinin değişen parçalarını B Servisine yazma ihtimalin yüksek olur...

(21 May '14, 06:04) SaRPaRDa SaRPaRDa's gravatar image

Etiketlerden anladığım kadarıyla JPA kullanıyorsun.

Servis Entity'sine parçaları bağlamak için Id alman gerekmiyor. Zaten Önce Servis'i ardından parçaları kaydetmek veritabanı bütünlüğünü etkileyecektir. Örneğin parçaları eklerken oluşacak bir kırılma parçası olmayan Servis kayıtları anlamına gelir. Servis Entity'si içerisine Parca Entity listesini eklersen JPA bağımlılıkları organize edecektir. Şöyleki;

Servis srv = new Service();
srv.setName = "Servis-1";

List<Parca> parcalar = new ArrayList<>();

Parca prc1 = new Parca();
prc1.setName="Parca- 1;
prc1.setServis(srv);

Parca prc2 = new Parca();
prc2.setName="Parca- 2;
prc2.setServis(srv);

parcalar.add(prc1);
parcalar.add(prc2);

em.persist(srv);

Yada illa ben Id okumak istiyorum diyorsan;

em.persist(Servis);
em.refresh(Servis);
Object id = Servis.getId();
permanent link

cevaplandı: 21 May '14, 03:51

SaRPaRDa's gravatar image

SaRPaRDa
5.0k213165
cevap kabul oranı: 27%

Merhaba yukarıya tekrar bir yazı ekledim

(21 May '14, 05:36) gezegen gezegen's gravatar image

Sizden ozaman son bir ricam var lazy olarak gönderebilen küçük bir örnek yazabilirmisiniz.

2 entity sınıf arasında . Bir entitydeki id alanını diğer entity içindeki private int servisId; alanına gönderebilecek.

(21 May '14, 08:39) gezegen gezegen's gravatar image

Entity ler birbirine bağımlı, yukarıdaki gibi transient objelerini birbiri içine kod ve en tepede service varsa sadece onu kaydet burada buna ilişkili olan entityler için ise entity sınıfın içinde cascade = CASCADE.ALL tanımını kullanman yeterli olacaktır. O ilişkili kayıtları oluşturur ;)

(21 May '14, 12:18) Turgay Can Turgay%20Can's gravatar image

Senaryo şu siz üstte bir servis seçin servisi sectiğinizde alttaki ilgili selectOne menuleri tetikleyin ve filtereyip selectOne menu icerisine populate edin. Aynı senaryo bir alt kırılımlar içinde geçerli. Tek sayfa, üstten doldurdukca alta doğru formun genişlemesi. Böylelikle tüm veriyi görmğş olur. tek buton hop cascade ol ile tüm tablolara kayıt gitti :)

(21 May '14, 16:39) Turgay Can Turgay%20Can's gravatar image
Cevabınız
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:

×1,079
×281
×144
×86

Soruldu: 20 May '14, 15:59

Görüntüleme: 1,268 kez

Son güncelleme: 21 May '14, 16:39

powered by BitNami OSQA