gpt4 book ai didi

java - NotNull 不工作,Column(nullable = false) 工作

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:45:59 24 4
gpt4 key购买 nike

我有一个 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 注释的 nullable=false 的替代方法,例如一些 Hibernate 配置?

这是我的 Spring 配置:

应用上下文

<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-persistence

<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> {
}

最佳答案

@NotNull是一个 JSR 303 Bean 验证注解。它与数据库约束本身无关。此注释用于验证。 @Column(nullable = false)是将列声明为非空的方法。最后一个注释用于指示数据库模式详细信息

关于java - NotNull 不工作,Column(nullable = false) 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24853094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com