繁体   English   中英

休眠中的布尔列类型(nullable true)

[英]Boolean column type (nullable true) in hibernate

问题是以下,我有一个实体与列..说:

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

如您所见,类型是布尔型。在数据库上,它是一个数字列(NUMBER(1,0))。 我正在尝试通过休眠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)角度来看,在同一数据库上的同一列(甚至名称相同),具有相同的数据类型,也不会给我任何错误。

所以我很困惑。

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

在执行始终有效的更新时,本周我收到了相同的异常消息。 所发生的变化是,我将JBoss从6.0.1.Final升级到了EAP-6.3,同时还提供了新版本的hibernate。

为了解决该问题,我仅在persistence.xml上将属性“ hibernate.dialect”的值从“ org.hibernate.dialect.OracleDialect”更改为“ org.hibernate.dialect.Oracle 9i Dialect”。

我建议使用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值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM