Konuyu görüntüle
IUCODERS FORUM > Programlama > JAVA > Hibernate Custom Validator
Yazar
codehunter


avatar
uzayin derinliklerin
Kayıt: 14.11.2006
07.05.2009-17:26 #59680
Hibernate kullanarak modelleme yaptigim bir projem var. Modellerim de custom validator uygulamak istedigim modeller mevcut fakat
bir sorunla karsilastim ki cozumunu ya da baska yolunu bulamadim yardimci olan arkadaslara simdiden cok tsk ederim.

ISNegative

@ValidatorClass( NegativeValueVal idator.class)
@Target(ElementType .METHOD)
@Retention(Retentio nPolicy.RUNTIME)
@Documented

public @interface IsNegative
{
String message() default "the value you have entered is negative";

}

------------ -
NegativeValueValida tor

public class NegativeValueValida tor implements Validator<IsNegative>, Serializable {

public void initialize(IsNegati ve arg0) {
// TODO Auto-generated method stub

}

public boolean isValid(Object value) {

int valueEntered = (Integer) value;

if(valueEntered < 0)
return false;
else
return true;
}

}


attribute in negative olup olmadigi kontrolunu yaptigim yukaridaki gibi bir validatorim var.

public class User implements Serializable {

// id, version, etc. are defined in BaseEntity
private String userName;
private Adres adres;
private int serial;



@IsNegative
public int getSerial() {
return serial;
}
public void setSerial(int serial) {
this.serial = serial;
}
.
.
.
} tarzinda bir User class im var.

public class Adres implements Serializable {

// id, version, etc. are defined in BaseEntity
private int zipcode;



@IsNegative
public int getZipcode() {
return zipcode;
}
public void setZipcode(int zipcode) {
this.zipcode= zipcode;
}
.
.
.
}
tarzinda da bir Adres class im var.

ben User classini validator a gonderdigim zaman sadece serial icin validation yapiyor ama mantik olarak
adres class i icindeki zipcode icinde validation yapmasi gerekirken yapmiyor.
Adres class i icindeki zipcode icinde validation isleminin yapilmasini nasil saglayabilirim?

ilgilenen herkese cok tesekkur ederim.

Kolay Gelsin...







Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
07.05.2009-22:29 #59687
Hibernate persist işleminden sonra ve commit işleminden sonra validation işlemlerini yapar. manuel olarak çalıştıracak isen
http://wheelersoftware.com/articles/hibernate-validator-3.html linkine bir goz atabilirsin ya da hibernate validatorun dokumantasyonuna da bakabilirsin.





N/A
Yazar
codehunter


avatar
uzayin derinliklerin
Kayıt: 14.11.2006
08.05.2009-00:20 #59691
Tesekkür ederim Orhan fakat ben aradigim sorunun cevabini bulamadim hala evet hibernate in kendi
validation larinda bunu yapıyor fakat ben kendi yazdıgım validationlara bunu yaptıramıyorum validation methoduna nesnemi gönderdigim sadece kendi attibutelerinde validaiton gerceklestiriyor.
Attributeleri icinde baska bir nesneye referans varsa o nesne icindeki validationlar calısmıyor.

Validation scope unu genisletmem lazım ama genisletemiyorum cascade sekilde calistiramıyorum
validation methodunu.

Tekrar tesekkür ederim (:





Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
08.05.2009-09:13 #59693
Bu validasyon işlemini nerde yapıyorsun? Kodun içerisinden yapıyor isen:
Eğer User ı persist / save ettiğinde address de persist/save oluyor ve çalışmıyor ise dediğin doğru orda bir sorun var. Sadece User'ı persist ediyor isen address in içindekiler zaten validate olmaz.

View katmanında yapıyor isen tld oluşturman laızm ya da seam kullanıyor isen s:validate kullanmalısın
runtime kısmını da şu şekilde bir değiştirip deneyebilirsin.
@Target({ METHOD, FIELD, TYPE })







N/A
Yazar
codehunter


avatar
uzayin derinliklerin
Kayıt: 14.11.2006
08.05.2009-10:10 #59695
Kod içerisinde yapıyorum model katmanında yapmayı istiyorum.
User classindan önce adres classini persist ediyorum.
Dünkü örneği test edeceğim acaba orda oluyor mu sonucu paylaşırım :)





Yazar
codehunter


avatar
uzayin derinliklerin
Kayıt: 14.11.2006
08.05.2009-10:53 #59697
Yardımların için teşekkür ederim Orhan sorunu buldum.

A nesnenin attributelerinden birisi B nesnesine referans ise
ve B nesnesinin attributelerinden biri C nesnesine referans ise ve bu cascade şekilde
ilerliyor ve biz en validation methoduna A nesnesini gönderip
içteki tüm nesnelerde validation uyguluyorsak nesneler birbirine @Valid ile baglanmalı.

class A{

B b;
C c;

@Valid
B getB( return B );
@Valid
C getC( return C );

}

class B{

int x;
D d;

@ISNegative
int getX(return x);

}

böylece A classini verip @Valid gördükçe alt class lara dogru dallanma yapılabilmektedir.

Kolay Gelsin..





Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
08.05.2009-11:38 #59698
 
http://docs.jboss.org/hibernate/stable/validator/reference/en/html_single/#validator-defineconstraints-builtin

Burda yazıyormuş ben de görmemişim.





N/A
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb