2014-07-20 49 views
3

我有一個彈簧本體與javax.validation.constraintsNOTNULL不工作,縱欄(可爲空= FALSE)工作

@Entity 
public abstract class IdentifiableNamedEntity { 
    @NotNull 
    @Column(unique = true) 
    private String name; 
} 

與@NotNull註釋字段的問題是,如果設置爲空值名稱字段,它被存儲在數據庫中。不過,如果我更改類如下,它提出的例外,我希望收到:

@Entity 
public abstract class IdentifiableNamedEntity { 
    @Column(unique = true, nullable=false) 
    private String name; 
} 

有沒有方法可以讓我避免指定爲空的=假,但得到@NotNull表現,因爲我想?除了依賴標準Java註釋的nullable = false之外,還有其他替代方法嗎?一些Hibernate配置?

這是我的Spring配置:

的ApplicationContext

<beans ...> 
<context:property-placeholder location="classpath*:spring/database.properties" /> 
<context:component-scan base-package="com.lh.clte" /> 
<import resource="classpath:spring/applicationContext-persistence.xml" /> 
</beans> 

的applicationContext的持久性

<beans ...> 
<import resource="classpath:spring/applicationContext-jpa.xml" /> 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close"> 
    <property name="driverClassName" value="${database.driverClassName}" /> 
    <property name="url" value="${database.url}" /> 
    <property name="username" value="${database.username}" /> 
    <property name="password" value="${database.password}" /> 
    <property name="initialSize" value="3" /> 
    <property name="maxActive" value="10" /> 
</bean> 

<tx:annotation-driven mode="proxy" 
    transaction-manager="transactionManager" /> 
<bean class="org.springframework.orm.jpa.JpaTransactionManager" 
    id="transactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 

<bean 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
    id="entityManagerFactory"> 
    <property name="persistenceUnitName" value="persistenceUnit" /> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 
</beans> 

的applicationContext-JPA

<beans ...> 
<jpa:repositories base-package="com.lh.clte.repository" /> 
</beans> 

由於我使用的存儲庫,我也報corrisponding 實體庫

@Repository 
public interface IdentifiableNamedEntityRepository extends JpaSpecificationExecutor<IdentifiableNamedEntity>, JpaRepository<IdentifiableNamedEntity, Long> { 
} 

回答

6

@NotNull是JSR 303 Bean驗證註解。它與數據庫約束本身無關。此註釋旨在用於驗證。 @Column(nullable = false)是將列聲明爲非空的方式。最後一個註釋用於指示數據庫模式細節

+0

是的,據我所知,但我也希望Hibernate使用該java驗證級別信息來派生該字段不應該在數據庫中爲空。至少,即使這不是默認行爲,我希望這是可配置的。 – Manu

+2

您是否擁有所有必需的庫,以便正確使用Hibernate驗證器。 http://hibernate.org/validator/documentation/getting-started/ –

+2

不,這是錯誤的:我添加了hibernate-validator,版本4.2.0.Final,它工作。謝謝 – Manu

0

您也可以使用Hibernate Validator的@NotEmpty