İyi akşamlar.

Başlıktaki gibi bir işlemim var. Veritabanına kayıt eklenmiş ise aynı kayıtı yeniden eklememek için en uygun yöntem nedir?

soruldu: 21 Şub '13, 15:22

fatihkaradeniz's gravatar image

fatihkaradeniz
90121319
cevap kabul oranı: 25%

değiştirildi: 21 Şub '13, 17:20

rahmanyazgan's gravatar image

rahmanyazgan ♦
4.4k83559

Kontrol ve model katmanınızda ne tür teknolojiler kullanıyorsunuz? Yada Uygulamanızda database işlemlerin, nasıl gerçekleştiriyorsunuz?

(21 Şub '13, 15:35) Turgay Can Turgay%20Can's gravatar image

Aynı değer derken bütün alanları aynı mı olacak yoksa sizin belirlediginiz bir alan mı aynı olursa?

(21 Şub '13, 15:38) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

jsf kullanıyorum veri tabanım mysql

(21 Şub '13, 15:42) fatihkaradeniz fatihkaradeniz's gravatar image

bütün alanları hocam günlük olarak değer çekiyorum aynı güne kayıt eklenmesini engellemek istiyorum ki iki kayıt çıkmasın örn = fatih 1 var ise fatih 1 postumu veritabanına ekleme gibi

(21 Şub '13, 15:45) fatihkaradeniz fatihkaradeniz's gravatar image
1

O zaman tarihe göre aynı olmasını istemediginiz kayıt var mı yok mu diye veritabanından cekip kontrol etmeniz lazım. Yada tek tarih içinde tek isim olacaksa zaten bu ikisi beraber primary_key olur. Bu iki alanı primary_key tanımlarsanız, @mceliksoy , hocamın dediği exception yontemini uygulayabilirsiniz...

(21 Şub '13, 15:48) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image
1

Tavsiyem soruyu daha detaylı sormanız. İş mantığıda var ek olarak, database dizaynına binayen. Ek olarak JSF + MySQL arada herhangi bir kontrol katmanı yokmu? Yoksa direkt jdbc client üzerinde kendiniz bütün jta işlemlerini yapıyorsunuz.

(21 Şub '13, 15:56) Turgay Can Turgay%20Can's gravatar image

kontrol katmanı derken hocan siz nasıl bir kontrol katmanı kullanıyorsunuz ben kontrol ve modellerin hepsini beanlar üzerinden yapıyorum

(21 Şub '13, 16:17) fatihkaradeniz fatihkaradeniz's gravatar image
7 yorumdan 5 tanesi gösteriliyor hepsini göster

Merhaba, bunun direkt olarak jsf2 ile bir bağlantisi yok. Genel olarak veritabanı mantığı ile ilgisi var. Öncelikle iyi bir veritabanı tasarımında, böyle durumlar için TekilAnahtar(lar)(Unique Constraint) tanımlamalısın. Böylelikle bu durumu öncelikle veritabanı katmanında engellersin. Sen kayıt yapmak istediğinde veritabanından UniqueContraintException geri dönecektir. Daha sonra ManagedBean de veritabanına kayıt yaptığın yerde, UniqueContraintException ı yakalarsın ve kullanıcıya uygun mesajı verirsin.

Ayrıca ManagedBean de veritabanında tanımladığın Tekil anahtarlara göre, önceden bir sorgu çekip, bu kayıttan var mı diye kontrol edebilirsin. Ancak bu çok ta iyi bir yaklaşım olmaz.

permanent link

cevaplandı: 21 Şub '13, 15:40

mceliksoy's gravatar image

mceliksoy ♦
6.5k84988
cevap kabul oranı: 25%

Hocam anlamadığım birşey var, aynı kayıt neye göre aynı oluyor. Mesela {id=1, name=ali || id=2, name=ali} bu ikisi aynı kayıt mı yoksa farklı kayıtlarmı?

(21 Şub '13, 15:45) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

Sizin dediğinize gore bunların kayıt edilmesinde exception oluşmayacaktır.

(21 Şub '13, 15:48) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

hocam o şekilde bir veritabanı tasarımı yapmadım dediğiniz olayda komle veritabımı değiştirmem gerekir bir biri ile bağlı bir çok durum var ve komple değiştirmem gerekir buda benim için sıfırdan tekrar başlamam anlamına geliyor peki şu şekilde yapsam hocam ayrı bir tablo yaratıp bu tabloya veriyi ekleyen kişinin kayıt yaptığına dair veri girişi olsa yeni bir kayıt yapmak istemesi durumunda true değeri gönderip de engellebirim sanırım

(21 Şub '13, 15:52) fatihkaradeniz fatihkaradeniz's gravatar image
1

"Kayıt neye göre aynıdır " sorusunun cevabı, veritabanı tasarımı yapılırken belirlenecek Tekil anahtarlara göre söylenebilir. Id , Ad, Soyad veya Ad ve Soyada beraber tekil olabilir. Buna tasrımcı karar verir.

Eğer veritabanıı değiştirme şansımız yoksa, ki bence Tekil anahtar eklemek sorun olmaz, ozaman ancak kayıttan önce ek bir sorgu çeker, istediğiniz şartlara uyan kayıt varmı diye kontrol edersiniz. Varsa kayıt işlemini yarıdakesersiniz.

(21 Şub '13, 16:01) mceliksoy ♦ mceliksoy's gravatar image

Sağolun hocam teşekkür ederim bizleri aydınlattığınız için

(21 Şub '13, 16:11) fatihkaradeniz fatihkaradeniz's gravatar image

Aynı kayıt derken en unique bir alan oldugnu varsayıyorum. Örneğin departman kaydı girişinde departman kodu gibi.

  1. MySql veritabanın kendisne bunu engelleyebilirsin. unique yaparsın alanı
  2. Eğer JPA ile yazıyorsan @Table(name="department", @UniqueConstraint(columnNames={"code"})
  3. Eğer JDBC ile yapıyorsan kod ile vertabanında veriyi çağırırsın ,
    • insert işlemi ise veritabanından kayıt gelmemelidir
    • update işlemi ise veritabaında gelen kaydın id'si ile güncel

Blockquote

leyeceğin kaydin id'si farklı olmamalıdır

Gördüğün üzere hiçbirinin JSF ile ilgilsi yok. Bu işlemi veri katmanlarında halledebilirsin.

Haa birde bu kontrol işlemleri otomatiğe almak için customvalidator yazıp JSF'deki alana bağlayabilirsin. Bean'in içine yazacagın bir method'u validator olarak baglayabilirsin.

Örnek olarak

http://www.fesoft.org/ozel-dogrulama-custom-validator/ CustomValidator2Bean.java örneğine bakabilirsin

permanent link

cevaplandı: 22 Şub '13, 06:43

ibrahimdemir's gravatar image

ibrahimdemir
77068
cevap kabul oranı: 0%

değiştirildi: 22 Şub '13, 06:46

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,077
×77
×32

Soruldu: 21 Şub '13, 15:22

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

Son güncelleme: 22 Şub '13, 06:46

powered by BitNami OSQA