当前位置: 首页 > 面试题库 >

持久性@Column nullable = false可以插入null

漆雕亮
2023-03-14
问题内容

我想做这个列不能为null,但是当我在数据库中插入一个寄存器值null时,这允许我插入。我阅读了文档,但我不知道为什么不起作用。
@Column(name="QWECOD", nullable = false) private String qwe;

谢谢

更新:我正在使用 Toplink 和java org.eclipse.persistence.eclipselink:2.4.2


问题答案:

我认为如果您使用EntityManager的实现生成模式,则会使用可为空的。我不知道是否也必须在持久化实体时对其进行验证。

如果使用@NotNull批注可能会有所帮助,但这不是普通的JPA。它在JSR-303中定义

编辑:在JPA 2.1规范中,有此部分:

11.2.2.1列
在架构生成中使用了列注释的以下元素:
名称
唯一的
可为空的 列定义
表的
长度(仅字符串值的列)精度(仅精确的数字(十进制/数字)列)规模(精确的数字(十进制/数字)
)(仅限列))有关适用于这些元素和列创建的规则,请参见11.1.9节。AttributeOverride批注可用于覆盖列映射。

因为没有给出其他提示,所以我假设以下内容:如果遵循JPA的EntityManager创建架构,则它必须通过使用与数据库等效的约束(例如notnull)在特定列上应用可为空的约束。
,则Entitymanager BUT不会通过基础数据库对其进行检查。因此,如果数据库引发错误,则EntityManager将此错误传播到调用者。

如果您在不使用DB可为空的约束的情况下自行创建表,则entitymanager会尝试保留该实体,并且不会出现错误->持久化还可以,但是有些空值不应该存在。



 类似资料:
  • 我所要做的就是从insert中获取作为long的返回值。我得到了,但它不起作用,我从返回的值中返回0。我正在使用一个、存储库和,如谷歌代码实验室中所述。在房间里插入后,我一直关注这篇文章。 球员级别 道 存储库 视图模型 活动

  • EJB 3.0,EJB 2.0中使用的实体bean在很大程度上被持久性机制所取代。 现在,实体bean是一个简单的POJO,它具有与表的映射。 以下是持久性API中的关键角色 - Entity - 表示数据存储记录的持久对象。 可序列化是件好事。 EntityManager - 持久性接口,用于对持久对象(实体)执行添加/删除/更新/查找等数据操作。 它还有助于使用Query接口执行查询。 Per

  • 调用init方法失败;嵌套的异常是javax。坚持不懈PersistenceException:[PersistenceUnit:默认值]无法生成Hibernate SessionFactory 在更换系统中的操作系统后,我遇到了这个异常。在我的应用程序运行MySQL 5.7和java 8之前。现在我把它改成了mySQL 8和java 8。代码没有任何变化。原因一定是什么?? 下面是日志:

  • 我刚开始使用docker,但我不明白一些事情。我只是使用docker-compose来使用PostgreSQL的基本映像,但我不知道如何在杀死docker甚至删除我的本地映像后使db中的数据持久化。这一切都可能吗? 这是我实际的docker-compose.yml: 也许我应该用体积?怎样

  • 我一直在使用codelabs实现我的房间数据库持久化。现在,在将数据插入房间数据库后,我正在尝试获取最新的rowID。但是,我被困在存储库中,试图从异步任务返回rowID。 LogEntity.java 洛格道。JAVA 日志数据库。JAVA 日志存储库。JAVA 我放了两个星号,因为我不确定在这里要做什么来获取insert RowID,以及我的AsyncTask是否完全正确。 LogViewMo

  • 问题内容: 我正在尝试实现一个简单的DAO。我有道: 和一个实体: 这是appContext.xml: 除非我在之后调用或插入未执行。这是为什么?如果删除,则刷新时会出现“没有正在进行的事务”的错误,但是如果删除刷新,则不会插入到数据库中。 问题答案: 之所以这样工作是因为您使用标记了事务为只读。 如您所见,由于您仍然可以通过手动调用保留更改,因此它不会使您的事务实际上是只读的。但是,它在事务结束