2012-01-11 15 views
5

bir varlığın devam sırasında ben varlıklar üzerinde sınırlamaların doğrulamak ve bunu 255 fazla olmayan bir süre olmak istiyorum, bu yüzden bu gibi tanımlanmış olabilir:nasıl alan adı olan bir varlık var hazırda

@Entity 
public class A implements Serializable { 

... 

@NotNull 
@Size(max=255) 
private String name; 

Ben a.persist() dediğimde doğrulanmasını istiyorum, böylece ad çok uzunsa bir istisna atılır.

<?xml version="1.0" encoding="UTF-8"?> 
<validation-config 
    xmlns="http://jboss.org/xml/ns/javax/validation/configuration" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration validation-configuration-1.0.xsd"> 
<default-provider>org.hibernate.validator.HibernateValidator</default-provider> 
<message-interpolator>org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator</message-interpolator> 
<traversable-resolver>org.hibernate.validator.engine.resolver.DefaultTraversableResolver</traversable-resolver> 
<constraint-validator-factory>org.hibernate.validator.engine.ConstraintValidatorFactoryImpl</constraint-validator-factory> 
</validation-config> 

Oysa çalışmıyor:

Ben HibernateValidator validation.xml'deki tanımladınız. İstisna yok, sadece esnasında taahhüt, varlık yöneticisi sifonu çekildiğinde devam sırasında atılan edilir ve bir istisna olsun ve (o çok boyutu 255 ile sütun üzerinde bir sınırlama olduğundan) o zaman bile veritabanından bir istisnadır. Bu yüzden, validasyonumun hiç işe yaramadığına inanıyorum. 1) nasıl doğrulama devam sırasında gerçekleşmesi ve yapmamaya sırasında aynı hizada 2) nasıl doğrulama başarısız olduğunda doğrulama istisnalar atmak için neden: bu iki soru ile bana yardımcı olursa

yüzden memnun olurum?

cevap

4

Sen Hibernate validator kullanabilirsiniz.

Eğer BeanValidationEventListener için önceden güncelleme ve ön uç olaylar açmak zorundayız.

bunu here ve here hakkında daha fazla bilgi bulabilirsiniz.

Yardım edin.

+0

teşekkürler! Bu doğrulama olur şimdi, yarar ama, sırasında geçerli olmaz (işlemediğim kadar hangi gerçekleşmeyebilir) sırasında temizleme gerçekleşir. Persist() dediğimde bunu yapmanın bir yolu var mı? –

+0

senin kimliği sadece zaman floş oturumu atanan ve Hazırda Nesnelerinizi devam zaman bu aslında aşamadır, çünkü bu normal bir davranış olduğunu düşünüyorum. –

+0

Thats öyle. "Persist()" de hayır, validasyonu() geçmez. Yalnızca işleminizi gerçekleştirirseniz() veya işleminizi gerçekleştirirseniz, fasulyelerinizi doğrular. Bu yüzden önce bir ısrar() ve sonra bir flush() – flipperweid