Java NotNull不工作,列(nullable=false)工作

Java NotNull不工作,列(nullable=false)工作,java,spring,jpa,notnull,Java,Spring,Jpa,Notnull,我有一个Spring实体,其中一个字段由javax.validation.constraints中的@NotNull注释 @Entity public abstract class IdentifiableNamedEntity { @NotNull @Column(unique = true) private String name; } 问题是,如果将名称字段设置为空值,则会将其存储在数据库中。但是,如果我按以下方式更改该类,则会引发我希望收到的异常: @Entit

我有一个Spring实体,其中一个字段由javax.validation.constraints中的@NotNull注释

@Entity
public abstract class IdentifiableNamedEntity {
    @NotNull
    @Column(unique = true)
    private String name;
}
问题是,如果将名称字段设置为空值,则会将其存储在数据库中。但是,如果我按以下方式更改该类,则会引发我希望收到的异常:

@Entity
public abstract class IdentifiableNamedEntity {
    @Column(unique = true, nullable=false)
    private String name;
}
有没有一种方法可以避免指定nullable=false,但让@NotNull按我所希望的方式运行?是否有依赖于标准Java注释(例如某些Hibernate配置)的nullable=false的替代方案

这是我的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>

由于我正在使用存储库,我还报告了相应的实体存储库

@Repository
public interface IdentifiableNamedEntityRepository extends JpaSpecificationExecutor<IdentifiableNamedEntity>, JpaRepository<IdentifiableNamedEntity, Long> {
}
@存储库
公共接口IdentifiableNamedEntityRepository扩展了JpaSpecificationExecutor,JpaRepository{
}

是JSR303bean验证注释。它与数据库约束本身无关。此注释用于验证。是将列声明为非null的方法。最后一个注释用于指示数据库架构详细信息。

您也可以使用Hibernate Validator的
@NotEmpty

是的,我理解这一点,但我也希望Hibernate使用java验证级别信息来推断数据库中的字段不应为空。至少,即使这不是默认行为,我也希望它是可配置的。为了使Hibernate验证器正常工作,您有所有必需的库吗。不,这是个错误:我添加了HibernateValidator,版本4.2.0.Final,它成功了。谢谢您也可以使用
@Valid@NotNull
。当应用
@Valid
时,JPA验证将自动启动以验证字段/列。