Java JPA 布尔字段数据库
Posted
技术标签:
【中文标题】Java JPA 布尔字段数据库【英文标题】:Java JPA Boolean Field Database 【发布时间】:2018-10-05 13:47:54 【问题描述】:我的模型中有一个这样创建的属性:
public class Client
private Boolean supervisor;
使用 Criteria 进行查询时,例如:p4 = cb.isTrue (root.get ("supervisor")),JPA 返回错误 client0_.supervisor = 1 - ERROR: conversion error of string "1" [SQLState :22018,ISC 错误代码:335544334]。我该如何解决这个问题?
我的 RDBMS 是 Firebird,主管列的类型是 BOOLEAN。
【问题讨论】:
数据库中列的类型是什么?如果它是 varchar,则需要一个转换器将其转换为布尔值。 (或者改变列的类型) 我的 RDBMS 是 Firebird,主管列的类型是 BOOLEAN。 jpa在数据库字段中读写正确,问题只在Criteria的where 【参考方案1】:根据给出的信息很难判断,但可能发生的情况是您的 JPA 实现是休眠的,而休眠 可能 没有方言Firebase,因此您使用的是其他方言(如 H2 方言),而这种方言可能无法正确处理布尔数据类型。
您需要首先验证是否确实如此,如果是这样,您将需要找到或实施一种用于 Firebase 的 Hibernate 方言来解决此问题。这肯定比调整设置要多,但也不需要付出巨大的努力,请看这里的示例:
HSQL + Hibernate Exception: Wrong column type: Found: double, expected: float
【讨论】:
Hibernate 5 似乎支持 Firebird。但是,OP 可能仍在使用错误的方言。 docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/… 我已经在我的 persistence.xml 中使用了:我已经设法解决了这个问题,不是使用 Criteria,而是使用 JPQL,如下所示:
select new Extensionista(e.id, e.name)
from Extensionista e
join e.localControle lc
where lc.id =: id
and e.cpf is not null
and e.status = 'T'
and e.supervisor = 'true'
order by e.name
【讨论】:
以上是关于Java JPA 布尔字段数据库的主要内容,如果未能解决你的问题,请参考以下文章
使用 JPA 和 Hibernate 将 Java 布尔值映射到 Oracle Number 列