2012-07-11 66 views
0

休眠驗證我才發現,我的休眠驗證不工作。我使用帶註釋的hibernate3。請檢查以下代碼。與註釋

@Entity 
@Table(name = "registration") 
public class Pojo implements Serializable{ 

    @Id 
    @Column(name = "id") 
    @NotNull 
    private int id; 
    @Column(name = "name", length=5) 
    @NotNull 
    private String name; 
    @Column(name = "surname", length=5) 
    @NotNull 
    private String surname; 
    @Column(name = "address", length=5) 
    @NotNull 
    private String address; 
getters and setters 

} 

以下是我的servlet

System.out.println("Kshitij-----"); 
     PrintWriter out = response.getWriter(); 
     SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); 
     Session session = sessionFactory.openSession(); 
     Transaction transaction = session.beginTransaction(); 
     Pojo r = new Pojo(); 
     r.setId(Integer.valueOf(request.getParameter("id"))); 
     r.setName(request.getParameter("name")); 
     r.setSurname(request.getParameter("surname")); 
     r.setAddress(request.getParameter("address")); 
     session.save(r); 
     transaction.commit(); 
     session.close(); 
     out.println("Success....."); 

它插入記錄沒有價值。我應該添加新的東西嗎??

+0

我建議檢查類路徑中包含'冬眠-validator'罐子。 – 2012-07-11 08:52:19

+0

我正在使用NetBeans,它提供了所有jibernate的hibernate。但我在那裏檢查,並沒有休眠驗證程序,所以我把它放在那裏,並運行項目。一樣。它不工作。 – KSHiTiJ 2012-07-11 09:04:39

回答

0

確認不是爲什麼你的數據不會保存的問題。 session.close();關閉會話,但在此之前您需要調用flush。這是corect以便與會話合作,succesfuly保存數據:

flush the session 
commit the transaction 
close the session 
handle exceptions 

See的文檔

+0

我在說我通過這個註釋使用了驗證。當我提交沒有價值的表單時,它必須給我驗證錯誤,並且它沒有給出。並在數據庫中存儲空白空間(非空)。這就是爲什麼我使用長度。但它不起作用。 – KSHiTiJ 2012-07-11 10:04:50

+0

好吧,我沒有完全理解你的問題...嗯,我看到你會實現任何驗證邏輯,因此你不能期望你的實體進行驗證。你應該使用基於事件的驗證或應用程序驗證...看看這篇文章http://docs.huihoo.com/hibernate/annotations-reference-3.2.1/validator.html – Eduard 2012-07-11 10:51:13

+0

所以它意味着這些註釋不是足以驗證實體,我必須擴展Validator類。 – KSHiTiJ 2012-07-11 11:01:48

0

嘗試直接與驗證實體;

ValidatorFactory factory = Validation.byDefaultProvider().configure().traversableResolver(new CustomTraversableResolver()).buildValidatorFactory(); 
Validator validator = factory.getValidator(); 
Set<ConstraintViolation<BaseValidationObject>> constraintViolations = Validator.validate(r); 

並添加例如, @Min(1)或@Length(1,255)添加到屬性註釋中。

的constraintViolations變量包含任何失敗的情況。

-1

也許你可以嘗試刪除當前表並重新創建它添加了這些約束條件之後。嘗試一些重新啓動。我以前有同樣的問題,它的工作原理。不知道這是你的情況。