【发布时间】: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)的角度来看,它都涉及相同的数据类型,它没有给我任何错误..
所以我很困惑..
如果有人能指出我正确的方向,我会很高兴..
【问题讨论】:
-
嗨,我也有同样的问题。你最后做了什么?