【问题标题】:Boolean field is always true布尔字段始终为真
【发布时间】:2026-01-08 00:05:02
【问题描述】:

我的字段如下所示:

@Column(columnDefinition = "Number(1,0) default '1'")
protected Boolean developersVisible;

当我从数据库中获取对象时,值总是true。无论数据库中有什么(null、0、1)

我正在使用 Oracle 数据库

解决了!

当我通过 sqldeveloper 更改值时我没有提交

我接受了 Óscars 的回答,因为它真的很有帮助

【问题讨论】:

  • 为什么不看看被调用的SQL呢?
  • @DataNucleus 选择看起来正常
  • @PhilippSander 您需要检查选择、插入/更新和查询以自动生成表模式。
  • 我通过 db 更新了值但没有插入

标签: java oracle jpa


【解决方案1】:

您是否尝试过使用另一个列定义,例如CHAR? 详情请见this post

【讨论】:

  • 不!这将创建对数据库的依赖关系。我知道甲骨文没有布尔值或位。这是 JPA 的工作(恕我直言)
  • 您可以确定您当前的代码(使用当前的 columnDefinition)也创建了对数据库的依赖项(例如,MySql 没有这样的列类型Number)。请更改您的问题并注意您不希望数据库依赖。在这种情况下,奥斯卡的答案绝对是一个不错的答案。
  • 我已经这样做了。摆脱依赖是我这样做的原因之一
【解决方案2】:

在这种情况下不要使用columnDefinition 属性,这不是必需的,它可能会混淆字段的映射。 default 1 部分解释了为什么你总是得到 true 值。试试这个:

@Column
protected Boolean developersVisible = Boolean.TRUE;

【讨论】:

  • 但我希望在添加列时所有值都为真
  • @PhilippSander 查看我的更新,这就是您创建默认值的方式。除非绝对必要,否则避免columnDefinition,否则会影响代码的可移植性
  • 这不是为所有条目设置true1(当我添加字段时它设置null(我删除它并再次创建列)
  • @PhilippSander 可能你持久化实体的方式有问题?
  • 我还没坚持,刚加了专栏!