gpt4 book ai didi

java - hibernate 中的 boolean 列类型(可空 true)

转载 作者:行者123 更新时间:2023-12-01 18:22:58 25 4
gpt4 key购买 nike

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

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

正如您所看到的,类型是 boolean 值。在数据库中,它是一个数字列(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和数据库(oracle)的数据类型相同的观点,它不会给我任何错误..

所以我很困惑..

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

最佳答案

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

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

关于java - hibernate 中的 boolean 列类型(可空 true),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27154954/

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