2012-07-17 72 views
1

我正在開發一個使用Spring JPA 2.0和Hibernate作爲ORM提供程序的應用程序。我們只讀取數據庫的訪問權限並生成報告。我想在獲取數據時進行一些驗證。使用Spring JPA和Hibernate從數據庫獲取數據時啓用強制驗證

@Column(name = "LOGICAL_ID", nullable = false) 
@NotNull 
private Long logicalId; 

我添加了實現JSR 303規範的Hibernate驗證器。但是在獲取它時不會拋出任何運行時異常或ConstraintViolationException?我在配置中添加了一些東西還是缺少一些東西?請指教我。

回答

2

像我張貼在Implementing cross-validation in java

您可以使用下面的代碼來手動驗證的實體;

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

如果你想這爲您自動完成,它可能是在「javax.persistence.validation.mode」屬性設置爲none(http://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/configuration.html)。

我更喜歡手動驗證,因爲那時你有控制和細節,其中約束沒有通過。

+0

您好Marius,感謝您的回覆。請原諒我的無知:如果我添加bean驗證模式= NONE,然後根據Hibernate文檔NONE:根本不使用Bean驗證。而且在我的情況下,我想拋出運行時異常。根據hibernate文檔:默認情況下,Bean Validation(和Hibernate Validator)被激活。當一個實體被創建,更新(並且可選地被刪除)時,它在被髮送到數據庫之前被驗證。在我的情況下,我只從數據庫讀取數據並驗證數據,如果它不匹配約束我需要拋出異常。 – 2012-07-17 16:41:41

相關問題