【问题标题】:Boolean column type (nullable true) in hibernate休眠中的布尔列类型(可为空的真)
【发布时间】:2014-11-26 17:06:44
【问题描述】:

问题如下,我有一个带有列的实体..说:

@Getter     
@Setter
@Column(name = "COLUMN_NAME", nullable = true)
private Boolean flag;

如您所见,类型是布尔值。在数据库中,它是一个数字列 (NUMBER(1,0))。我正在尝试通过hibernate jpa在表中执行选择和插入,因此选择是存储库查找,插入是saveAndFlush。 这是选择:

public static final String query = "SELECT mgb FROM Entity mgb WHERE "
        + "( "
        +   "("
        +       "mgb.flag= :flag"
        +   ") OR "
        +   "(:flag IS NULL)"
        + ") AND "
        + "mgb.otherColumn IS NULL";
@Query(query)
public List<Entity>find(@Param("flag") Boolean flag);

这是插入:

    Entity mgbi = new Entity();
    mgbi.setFlag(null);
    EntityRepository.saveAndFlush(mgbi); 

这两个操作都抛出了同样的异常;

2014-11-26 17:50:25,279 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] - <SQL Error: 17004, SQLState: 99999>
2014-11-26 17:50:25,280 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] - <Invalid column type: 16>

我做了一些尝试,发现如果我将这一行:mgbi.setFlag(null); 更改为 mgbi.setFlag(true);,则不会再抛出错误,并且插入正确完成。

我在网上发现 boolean 类型在 java 中有这个问题,但我使用了 Boolean,它不应该表现得这么奇怪。最后但同样重要的是,我已经另一个实体,具有几乎相同的列(即使名称相同),在同一个数据库上,从 java 和 db(oracle)的角度来看,它都涉及相同的数据类型,它没有给我任何错误..

所以我很困惑..

如果有人能指出我正确的方向,我会很高兴..

【问题讨论】:

  • 嗨,我也有同样的问题。你最后做了什么?

标签: java oracle hibernate jpa


【解决方案1】:

本周我在执行始终有效的更新时收到了相同的异常消息。改变的是我将我的 JBoss 从 6.0.1.Final 升级到了 EAP-6.3,它还附带了一个新版本的 hibernate。

为了解决这个问题,我只是将属性“hibernate.dialect”的值从“org.hibernate.dialect.OracleDialect”更改为“org.hibernate.dialect.Oracle9iDialect”在 persistence.xml 上。

【讨论】:

  • 我会试一试,但问题只是在测试中,使用服务器(tomcat 7)它没有被抛出..但是我会试一试,因为没有做测试就像把我的手绑起来,直到我有完整的界面工作..但是谢谢你的回答......
  • 是的,仅在测试中!一个真正的谜......嗯?
  • 我使用了“org.hibernate.dialect.Oracle10gDialect”,它成功了。
【解决方案2】:

我建议使用 Hibernate 支持的 SQL 合并功能:

public static final String query = "SELECT mgb FROM Entity mgb WHERE "
        + "mgb.flag = coalesce(:flag, mgb.flag) "
        + "AND mgb.otherColumn IS NULL";

它首先返回参数中的非NULL值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    相关资源
    最近更新 更多